V4L/DVB (7927): ivtv: simplify gpio initialization for XCeive tuners.
authorHans Verkuil <hverkuil@xs4all.nl>
Tue, 20 May 2008 09:24:04 +0000 (06:24 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 20 Jul 2008 10:06:47 +0000 (07:06 -0300)
Separate gpio_init field and xceive_pin and combine the two when
the gpio is initialized. So there is no longer any need to set the
xceive pin in the gpio_init values, simplifying the creation of a
new card definition.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/ivtv/ivtv-cards.c
drivers/media/video/ivtv/ivtv-gpio.c

index ba2b0cf4531b873d05e18d1cfb53135d5118c3f9..dc3fbb320684d5bd75d67c9ae5d6fd721bf92117 100644 (file)
@@ -923,7 +923,6 @@ static const struct ivtv_card ivtv_card_club3d = {
                { IVTV_CARD_INPUT_LINE_IN1,   CX25840_AUDIO_SERIAL },
        },
        .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
-       .gpio_init = { .direction = 0x1000, .initial_value = 0x1000 }, /* tuner reset */
        .xceive_pin = 12,
        .tuners = {
                { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
@@ -959,7 +958,7 @@ static const struct ivtv_card ivtv_card_avertv_mce116 = {
                { IVTV_CARD_INPUT_LINE_IN1,   CX25840_AUDIO_SERIAL, 1 },
        },
        /* enable line-in */
-       .gpio_init = { .direction = 0xe400, .initial_value = 0x4400 },
+       .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
        .xceive_pin = 10,
        .tuners = {
                { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
@@ -1102,7 +1101,7 @@ static const struct ivtv_card ivtv_card_aver_m104 = {
        },
        .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
        /* enable line-in + reset tuner */
-       .gpio_init = { .direction = 0xe400, .initial_value = 0x4000 },
+       .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
        .xceive_pin = 10,
        .tuners = {
                { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
@@ -1138,7 +1137,6 @@ static const struct ivtv_card ivtv_card_buffalo = {
                { IVTV_CARD_INPUT_AUD_TUNER,  CX25840_AUDIO5       },
                { IVTV_CARD_INPUT_LINE_IN1,   CX25840_AUDIO_SERIAL },
        },
-       .gpio_init = { .direction = 0x1000, .initial_value = 0x1000 },
        .xceive_pin = 12,
        .tuners = {
                { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
index d8ac09f3cce6ffc17506c6bc7d7d4021e8bacf07..bc22905ea20fa58c5f890a58a418361d495a46ef 100644 (file)
@@ -146,15 +146,20 @@ int ivtv_reset_tuner_gpio(void *dev, int cmd, int value)
 
 void ivtv_gpio_init(struct ivtv *itv)
 {
-       if (itv->card->gpio_init.direction == 0)
+       u16 pin = 0;
+
+       if (itv->card->xceive_pin)
+               pin = 1 << itv->card->xceive_pin;
+
+       if ((itv->card->gpio_init.direction | pin) == 0)
                return;
 
        IVTV_DEBUG_INFO("GPIO initial dir: %08x out: %08x\n",
                   read_reg(IVTV_REG_GPIO_DIR), read_reg(IVTV_REG_GPIO_OUT));
 
        /* init output data then direction */
-       write_reg(itv->card->gpio_init.initial_value, IVTV_REG_GPIO_OUT);
-       write_reg(itv->card->gpio_init.direction, IVTV_REG_GPIO_DIR);
+       write_reg(itv->card->gpio_init.initial_value | pin, IVTV_REG_GPIO_OUT);
+       write_reg(itv->card->gpio_init.direction | pin, IVTV_REG_GPIO_DIR);
 }
 
 static struct v4l2_queryctrl gpio_ctrl_mute = {