V4L/DVB (9752): Remove duplicated fields on em28xx_board and em28xx structs
authorMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 25 Nov 2008 12:39:50 +0000 (09:39 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 29 Dec 2008 19:53:41 +0000 (17:53 -0200)
Several fields are duplicated on both structs. Let's just copy em28xx_board instead.

A later cleanup could just copy the fields that are changed, in order to keep em28xx_board
const.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/em28xx/em28xx-cards.c
drivers/media/video/em28xx/em28xx-core.c
drivers/media/video/em28xx/em28xx-dvb.c
drivers/media/video/em28xx/em28xx-i2c.c
drivers/media/video/em28xx/em28xx-input.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/em28xx/em28xx.h

index 0d489cad2d56e7e3facf41028af72314114bd496..11308ebd18a00ff665c211748d3376a47fdf4d2d 100644 (file)
@@ -1262,19 +1262,9 @@ int em28xx_tuner_callback(void *ptr, int component, int command, int arg)
 }
 EXPORT_SYMBOL_GPL(em28xx_tuner_callback);
 
-static void em28xx_set_model(struct em28xx *dev)
+static void inline em28xx_set_model(struct em28xx *dev)
 {
-       dev->is_em2800 = em28xx_boards[dev->model].is_em2800;
-       dev->has_msp34xx = em28xx_boards[dev->model].has_msp34xx;
-       dev->tda9887_conf = em28xx_boards[dev->model].tda9887_conf;
-       dev->decoder = em28xx_boards[dev->model].decoder;
-       dev->xclk = em28xx_boards[dev->model].xclk;
-       dev->i2c_speed = em28xx_boards[dev->model].i2c_speed;
-       dev->max_range_640_480 = em28xx_boards[dev->model].max_range_640_480;
-       dev->has_dvb = em28xx_boards[dev->model].has_dvb;
-       dev->has_snapshot_button = em28xx_boards[dev->model].has_snapshot_button;
-       dev->ir_codes = em28xx_boards[dev->model].ir_codes;
-       dev->valid = em28xx_boards[dev->model].valid;
+       memcpy(&dev->board, &em28xx_boards[dev->model], sizeof(dev->board));
 }
 
 /* Since em28xx_pre_card_setup() requires a proper dev->model,
@@ -1331,16 +1321,16 @@ void em28xx_pre_card_setup(struct em28xx *dev)
        /* Those are the default values for the majority of boards
           Use those values if not specified otherwise at boards entry
         */
-       if (!dev->xclk)
-               dev->xclk = EM28XX_XCLK_IR_RC5_MODE |
-                           EM28XX_XCLK_FREQUENCY_12MHZ;
+       if (!dev->board.xclk)
+               dev->board.xclk = EM28XX_XCLK_IR_RC5_MODE |
+                                 EM28XX_XCLK_FREQUENCY_12MHZ;
 
-       if (!dev->i2c_speed)
-               dev->i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE |
-                                EM28XX_I2C_FREQ_100_KHZ;
+       if (!dev->board.i2c_speed)
+               dev->board.i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE |
+                                      EM28XX_I2C_FREQ_100_KHZ;
 
-       em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->xclk & 0x7f);
-       em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, dev->i2c_speed);
+       em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk & 0x7f);
+       em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, dev->board.i2c_speed);
        msleep(50);
 
        /* request some modules */
@@ -1694,7 +1684,7 @@ void em28xx_card_setup(struct em28xx *dev)
 
                if (tv.audio_processor == V4L2_IDENT_MSPX4XX) {
                        dev->i2s_speed = 2048000;
-                       dev->has_msp34xx = 1;
+                       dev->board.has_msp34xx = 1;
                }
 #ifdef CONFIG_MODULES
                if (tv.has_ir)
@@ -1727,10 +1717,10 @@ void em28xx_card_setup(struct em28xx *dev)
                break;
        }
 
-       if (dev->has_snapshot_button)
+       if (dev->board.has_snapshot_button)
                em28xx_register_snapshot_button(dev);
 
-       if (dev->valid == EM28XX_BOARD_NOT_VALIDATED) {
+       if (dev->board.valid == EM28XX_BOARD_NOT_VALIDATED) {
                em28xx_errdev("\n\n");
                em28xx_errdev("The support for this board weren't "
                              "valid yet.\n");
@@ -1745,13 +1735,13 @@ void em28xx_card_setup(struct em28xx *dev)
 
 #ifdef CONFIG_MODULES
        /* request some modules */
-       if (dev->has_msp34xx)
+       if (dev->board.has_msp34xx)
                request_module("msp3400");
-       if (dev->decoder == EM28XX_SAA7113 || dev->decoder == EM28XX_SAA7114)
+       if (dev->board.decoder == EM28XX_SAA7113 || dev->board.decoder == EM28XX_SAA7114)
                request_module("saa7115");
-       if (dev->decoder == EM28XX_TVP5150)
+       if (dev->board.decoder == EM28XX_TVP5150)
                request_module("tvp5150");
-       if (dev->tuner_type != TUNER_ABSENT)
+       if (dev->board.tuner_type != TUNER_ABSENT)
                request_module("tuner");
 #endif
 
index 53c7252416f01a54c0e450772118784439b2a87b..164f9b3d0a91fb616d88ff298f921f0226a4bb05 100644 (file)
@@ -349,7 +349,7 @@ static int em28xx_set_audio_source(struct em28xx *dev)
        int ret;
        u8 input;
 
-       if (dev->is_em2800) {
+       if (dev->board.is_em2800) {
                if (dev->ctl_ainput == EM28XX_AMUX_VIDEO)
                        input = EM2800_AUDIO_SRC_TUNER;
                else
@@ -360,7 +360,7 @@ static int em28xx_set_audio_source(struct em28xx *dev)
                        return ret;
        }
 
-       if (dev->has_msp34xx)
+       if (dev->board.has_msp34xx)
                input = EM28XX_AUDIO_SRC_TUNER;
        else {
                switch (dev->ctl_ainput) {
@@ -417,7 +417,7 @@ int em28xx_audio_analog_set(struct em28xx *dev)
                }
        }
 
-       xclk = dev->xclk & 0x7f;
+       xclk = dev->board.xclk & 0x7f;
        if (!dev->mute)
                xclk |= 0x80;
 
@@ -658,7 +658,7 @@ static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
 {
        u8 mode;
        /* the em2800 scaler only supports scaling down to 50% */
-       if (dev->is_em2800)
+       if (dev->board.is_em2800)
                mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
        else {
                u8 buf[2];
index c99e2383b7ec994cf92532bd2135812ecdda822d..09c15cc088a627b41411701366c3c155bb756c97 100644 (file)
@@ -393,7 +393,7 @@ static int dvb_init(struct em28xx *dev)
        int result = 0;
        struct em28xx_dvb *dvb;
 
-       if (!dev->has_dvb) {
+       if (!dev->board.has_dvb) {
                /* This device does not support the extension */
                return 0;
        }
@@ -479,7 +479,7 @@ out_free:
 
 static int dvb_fini(struct em28xx *dev)
 {
-       if (!dev->has_dvb) {
+       if (!dev->board.has_dvb) {
                /* This device does not support the extension */
                return 0;
        }
index ec3e3b157ba868fb51e402df4d75424dcbafba81..78d60231ee3fe15b15b40d8f4b2ac1e3a3ca07b5 100644 (file)
@@ -250,7 +250,7 @@ static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
                         (msgs[i].flags & I2C_M_RD) ? "read" : "write",
                         i == num - 1 ? "stop" : "nonstop", addr, msgs[i].len);
                if (!msgs[i].len) { /* no len: check only for device presence */
-                       if (dev->is_em2800)
+                       if (dev->board.is_em2800)
                                rc = em2800_i2c_check_for_device(dev, addr);
                        else
                                rc = em28xx_i2c_check_for_device(dev, addr);
@@ -261,7 +261,7 @@ static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
 
                } else if (msgs[i].flags & I2C_M_RD) {
                        /* read bytes */
-                       if (dev->is_em2800)
+                       if (dev->board.is_em2800)
                                rc = em2800_i2c_recv_bytes(dev, addr,
                                                           msgs[i].buf,
                                                           msgs[i].len);
@@ -279,7 +279,7 @@ static int em28xx_i2c_xfer(struct i2c_adapter *i2c_adap,
                                for (byte = 0; byte < msgs[i].len; byte++)
                                        printk(" %02x", msgs[i].buf[byte]);
                        }
-                       if (dev->is_em2800)
+                       if (dev->board.is_em2800)
                                rc = em2800_i2c_send_bytes(dev, addr,
                                                           msgs[i].buf,
                                                           msgs[i].len);
index 07edd4067acc000d5e41605836fe77ab5c6f26da..42bbaf64aceb568a90edbda272eb4abe6e8ece79 100644 (file)
@@ -327,7 +327,7 @@ int em28xx_ir_init(struct em28xx *dev)
        u8 ir_config;
        int err = -ENOMEM;
 
-       if (dev->ir_codes == NULL) {
+       if (dev->board.ir_codes == NULL) {
                /* No remote control support */
                return 0;
        }
@@ -366,7 +366,7 @@ int em28xx_ir_init(struct em28xx *dev)
        usb_make_path(dev->udev, ir->phys, sizeof(ir->phys));
        strlcat(ir->phys, "/input0", sizeof(ir->phys));
 
-       ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER, dev->ir_codes);
+       ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER, dev->board.ir_codes);
        input_dev->name = ir->name;
        input_dev->phys = ir->phys;
        input_dev->id.bustype = BUS_USB;
index 5cf32aed8c2e5bac8d863b136197385e2589b913..845253c5d2a1b4b5d13169c223d6dec30d3e6d5d 100644 (file)
@@ -517,7 +517,7 @@ static int em28xx_config(struct em28xx *dev)
        int retval;
 
        /* Sets I2C speed to 100 KHz */
-       if (!dev->is_em2800) {
+       if (!dev->board.is_em2800) {
                retval = em28xx_write_regs_req(dev, 0x00, 0x06, "\x40", 1);
                if (retval < 0) {
                        em28xx_errdev("%s: em28xx_write_regs_req failed! retval [%d]\n",
@@ -573,7 +573,7 @@ static void video_mux(struct em28xx *dev, int index)
 
        em28xx_i2c_call_clients(dev, VIDIOC_INT_S_VIDEO_ROUTING, &route);
 
-       if (dev->has_msp34xx) {
+       if (dev->board.has_msp34xx) {
                if (dev->i2s_speed) {
                        em28xx_i2c_call_clients(dev, VIDIOC_INT_I2S_CLOCK_FREQ,
                                &dev->i2s_speed);
@@ -747,7 +747,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
 
        mutex_lock(&dev->lock);
 
-       if (dev->is_em2800) {
+       if (dev->board.is_em2800) {
                /* the em2800 can only scale down to 50% */
                if (height % (maxh / 2))
                        height = maxh;
@@ -998,7 +998,7 @@ static int vidioc_queryctrl(struct file *file, void *priv,
 
        qc->id = id;
 
-       if (!dev->has_msp34xx) {
+       if (!dev->board.has_msp34xx) {
                for (i = 0; i < ARRAY_SIZE(em28xx_qctrl); i++) {
                        if (qc->id && qc->id == em28xx_qctrl[i].id) {
                                memcpy(qc, &(em28xx_qctrl[i]), sizeof(*qc));
@@ -1028,7 +1028,7 @@ static int vidioc_g_ctrl(struct file *file, void *priv,
                return rc;
        mutex_lock(&dev->lock);
 
-       if (!dev->has_msp34xx)
+       if (!dev->board.has_msp34xx)
                rc = em28xx_get_ctrl(dev, ctrl);
        else
                rc = -EINVAL;
@@ -1056,7 +1056,7 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
 
        mutex_lock(&dev->lock);
 
-       if (dev->has_msp34xx)
+       if (dev->board.has_msp34xx)
                em28xx_i2c_call_clients(dev, VIDIOC_S_CTRL, ctrl);
        else {
                rc = 1;
@@ -2035,7 +2035,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
        dev->em28xx_read_reg_req_len = em28xx_read_reg_req_len;
        dev->em28xx_write_regs_req = em28xx_write_regs_req;
        dev->em28xx_read_reg_req = em28xx_read_reg_req;
-       dev->is_em2800 = em28xx_boards[dev->model].is_em2800;
+       dev->board.is_em2800 = em28xx_boards[dev->model].is_em2800;
 
        em28xx_pre_card_setup(dev);
 
@@ -2092,7 +2092,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
        INIT_LIST_HEAD(&dev->vidq.queued);
 
 
-       if (dev->has_msp34xx) {
+       if (dev->board.has_msp34xx) {
                /* Send a reset to other chips via gpio */
                errCode = em28xx_write_regs_req(dev, 0x00, 0x08, "\xf7", 1);
                if (errCode < 0) {
@@ -2150,7 +2150,7 @@ static void request_module_async(struct work_struct *work)
        else if (dev->has_alsa_audio)
                request_module("em28xx-alsa");
 
-       if (dev->has_dvb)
+       if (dev->board.has_dvb)
                request_module("em28xx-dvb");
 }
 
index 059cc7f43b5666408b3f35aa34a618b11f320b2f..e33aa544bbbc986e33e7b6629fc458710d99bb28 100644 (file)
@@ -328,6 +328,7 @@ struct em28xx_reg_seq {
 
 struct em28xx_board {
        char *name;
+       int vchannels;
        int tuner_type;
        int tuner_addr;
 
@@ -416,18 +417,12 @@ struct em28xx {
        int model;              /* index in the device_data struct */
        int devno;              /* marks the number of this device */
        enum em28xx_chip_id chip_id;
-       unsigned int is_em2800:1;
-       unsigned int has_msp34xx:1;
-       unsigned int has_tda9887:1;
+
+       struct em28xx_board board;
+
        unsigned int stream_on:1;       /* Locks streams */
        unsigned int has_audio_class:1;
        unsigned int has_alsa_audio:1;
-       unsigned int max_range_640_480:1;
-       unsigned int has_dvb:1;
-       unsigned int has_snapshot_button:1;
-       unsigned int valid:1;           /* report for validated boards */
-
-       unsigned char xclk, i2c_speed;
 
        struct em28xx_IR *ir;
 
@@ -444,7 +439,6 @@ struct em28xx {
 
        u32 i2s_speed;          /* I2S speed for audio digital stream */
 
-       enum em28xx_decoder decoder;
        struct em28xx_audio_mode audio_mode;
 
        int tuner_type;         /* type of the tuner */
@@ -527,9 +521,6 @@ struct em28xx {
        /* Caches GPO and GPIO registers */
        unsigned char   reg_gpo, reg_gpio;
 
-       /* Infrared remote control support */
-       IR_KEYTAB_TYPE *ir_codes;
-
        /* Snapshot button */
        char snapshot_button_path[30];  /* path of the input dev */
        struct input_dev *sbutton_input_dev;
@@ -699,7 +690,7 @@ static inline int em28xx_gamma_set(struct em28xx *dev, s32 val)
 /*FIXME: maxw should be dependent of alt mode */
 static inline unsigned int norm_maxw(struct em28xx *dev)
 {
-       if (dev->max_range_640_480)
+       if (dev->board.max_range_640_480)
                return 640;
        else
                return 720;
@@ -707,7 +698,7 @@ static inline unsigned int norm_maxw(struct em28xx *dev)
 
 static inline unsigned int norm_maxh(struct em28xx *dev)
 {
-       if (dev->max_range_640_480)
+       if (dev->board.max_range_640_480)
                return 480;
        else
                return (dev->norm & V4L2_STD_625_50) ? 576 : 480;