[media] ir-core: make struct rc_dev the primary interface
[deliverable/linux.git] / drivers / media / video / cx231xx / cx231xx.h
index d9a90c50aaa06909ac53c2f69ec60d1141acae66..c439e778c4b11ed15f77f36750e4221a892da3cf 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/ioctl.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
+#include <linux/workqueue.h>
 #include <linux/mutex.h>
 
 #include <media/cx2341x.h>
 #include <media/videobuf-vmalloc.h>
 #include <media/v4l2-device.h>
 #include <media/ir-core.h>
-#if defined(CONFIG_VIDEO_CX231XX_DVB) || \
-       defined(CONFIG_VIDEO_CX231XX_DVB_MODULE)
+#include <media/ir-kbd-i2c.h>
 #include <media/videobuf-dvb.h>
-#endif
 
 #include "cx231xx-reg.h"
 #include "cx231xx-pcb-cfg.h"
 
 /* Boards supported by driver */
 #define CX231XX_BOARD_UNKNOWN              0
-#define CX231XX_BOARD_CNXT_CARRAERA            1
-#define CX231XX_BOARD_CNXT_SHELBY      2
-#define CX231XX_BOARD_CNXT_RDE_253S            3
-#define CX231XX_BOARD_CNXT_RDU_253S            4
+#define CX231XX_BOARD_CNXT_CARRAERA    1
+#define CX231XX_BOARD_CNXT_SHELBY      2
+#define CX231XX_BOARD_CNXT_RDE_253S    3
+#define CX231XX_BOARD_CNXT_RDU_253S    4
 #define CX231XX_BOARD_CNXT_VIDEO_GRABBER       5
-#define CX231XX_BOARD_CNXT_RDE_250     6
-#define CX231XX_BOARD_CNXT_RDU_250             7
+#define CX231XX_BOARD_CNXT_RDE_250     6
+#define CX231XX_BOARD_CNXT_RDU_250     7
+#define CX231XX_BOARD_HAUPPAUGE_EXETER  8
+#define CX231XX_BOARD_HAUPPAUGE_USBLIVE2 9
+#define CX231XX_BOARD_PV_PLAYTV_USB_HYBRID 10
 
 /* Limits minimum and default number of buffers */
 #define CX231XX_MIN_BUF                 4
@@ -331,9 +333,10 @@ struct cx231xx_board {
        struct cx231xx_reg_seq *dvb_gpio;
        struct cx231xx_reg_seq *suspend_gpio;
        struct cx231xx_reg_seq *tuner_gpio;
-       u8 tuner_sif_gpio;
-       u8 tuner_scl_gpio;
-       u8 tuner_sda_gpio;
+               /* Negative means don't use it */
+       s8 tuner_sif_gpio;
+       s8 tuner_scl_gpio;
+       s8 tuner_sda_gpio;
 
        /* PIN ctrl */
        u32 ctl_pin_status_mask;
@@ -343,6 +346,10 @@ struct cx231xx_board {
        /* i2c masters */
        u8 tuner_i2c_master;
        u8 demod_i2c_master;
+       u8 ir_i2c_master;
+
+       /* for devices with I2C chips for IR */
+       char *rc_map;
 
        unsigned int max_range_640_480:1;
        unsigned int has_dvb:1;
@@ -351,6 +358,7 @@ struct cx231xx_board {
        unsigned char xclk, i2c_speed;
 
        enum cx231xx_decoder decoder;
+       int output_mode;
 
        struct cx231xx_input input[MAX_CX231XX_INPUT];
        struct cx231xx_input radio;
@@ -383,9 +391,6 @@ enum AUDIO_INPUT {
 #define CX231XX_AUDIO_BUFS              5
 #define CX231XX_NUM_AUDIO_PACKETS       16
 #define CX231XX_ISO_NUM_AUDIO_PACKETS  64
-#define CX231XX_CAPTURE_STREAM_EN       1
-#define CX231XX_STOP_AUDIO              0
-#define CX231XX_START_AUDIO             1
 
 /* cx231xx extensions */
 #define CX231XX_AUDIO                   0x10
@@ -403,7 +408,6 @@ struct cx231xx_audio {
        struct snd_card *sndcard;
 
        int users, shutdown;
-       enum cx231xx_stream_state capture_stream;
        /* locks */
        spinlock_t slock;
 
@@ -598,6 +602,25 @@ struct cx231xx_tsport {
        void                       *port_priv;
 };
 
+struct cx231xx_ir_t {
+       struct input_dev *input_dev;
+       char name[40];
+       char phys[32];
+
+#if 0  
+       /*
+        * Due to a Kconfig change, cx231xx-input is not being compiled.
+        * This structure disappeared, but other fixes are also needed.
+        * So, as a workaround, let's just comment this struct and let a
+        * latter patch fix it.
+        */
+       struct ir_dev_props props;
+#endif
+
+       /* I2C keyboard data */
+       struct IR_i2c_init_data    init_data;
+};
+
 /* main device struct */
 struct cx231xx {
        /* generic device properties */
@@ -607,6 +630,9 @@ struct cx231xx {
 
        struct cx231xx_board board;
 
+       /* For I2C IR support */
+       struct cx231xx_ir_t ir;
+
        unsigned int stream_on:1;       /* Locks streams */
        unsigned int vbi_stream_on:1;   /* Locks streams for VBI */
        unsigned int has_audio_class:1;
@@ -618,7 +644,8 @@ struct cx231xx {
        struct v4l2_subdev *sd_cx25840;
        struct v4l2_subdev *sd_tuner;
 
-       struct cx231xx_IR *ir;
+       struct work_struct wq_trigger;          /* Trigger to start/stop audio for alsa module */
+       atomic_t           stream_started;      /* stream should be running if true */
 
        struct list_head devlist;
 
@@ -644,8 +671,6 @@ struct cx231xx {
        /* frame properties */
        int width;              /* current frame width */
        int height;             /* current frame height */
-       unsigned hscale;        /* horizontal scale factor (see datasheet) */
-       unsigned vscale;        /* vertical scale factor (see datasheet) */
        int interlaced;         /* 1=interlace fileds, 0=just top fileds */
 
        struct cx231xx_audio adev;
@@ -875,7 +900,6 @@ int cx231xx_set_audio_decoder_input(struct cx231xx *dev,
                                    enum AUDIO_INPUT audio_input);
 
 int cx231xx_capture_start(struct cx231xx *dev, int start, u8 media_type);
-int cx231xx_resolution_set(struct cx231xx *dev);
 int cx231xx_set_video_alternate(struct cx231xx *dev);
 int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt);
 int is_fw_load(struct cx231xx *dev);
@@ -929,7 +953,7 @@ int cx231xx_power_suspend(struct cx231xx *dev);
 int cx231xx_init_ctrl_pin_status(struct cx231xx *dev);
 int cx231xx_set_agc_analog_digital_mux_select(struct cx231xx *dev,
                                              u8 analog_or_digital);
-int cx231xx_enable_i2c_for_tuner(struct cx231xx *dev, u8 I2CIndex);
+int cx231xx_enable_i2c_port_3(struct cx231xx *dev, bool is_port_3);
 
 /* video audio decoder related functions */
 void video_mux(struct cx231xx *dev, int index);
@@ -950,17 +974,23 @@ extern void cx231xx_card_setup(struct cx231xx *dev);
 extern struct cx231xx_board cx231xx_boards[];
 extern struct usb_device_id cx231xx_id_table[];
 extern const unsigned int cx231xx_bcount;
-void cx231xx_register_i2c_ir(struct cx231xx *dev);
 int cx231xx_tuner_callback(void *ptr, int component, int command, int arg);
 
-/* Provided by cx231xx-input.c */
-int cx231xx_ir_init(struct cx231xx *dev);
-int cx231xx_ir_fini(struct cx231xx *dev);
-
 /* cx23885-417.c                                               */
 extern int cx231xx_417_register(struct cx231xx *dev);
 extern void cx231xx_417_unregister(struct cx231xx *dev);
 
+/* cx23885-input.c                                             */
+
+#if defined(CONFIG_VIDEO_CX231XX_RC)
+int cx231xx_ir_init(struct cx231xx *dev);
+void cx231xx_ir_exit(struct cx231xx *dev);
+#else
+#define cx231xx_ir_init(dev)   (0)
+#define cx231xx_ir_exit(dev)   (0)
+#endif
+
+
 /* printk macros */
 
 #define cx231xx_err(fmt, arg...) do {\
This page took 0.028483 seconds and 5 git commands to generate.