tm6000

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Mauro,

First, I have a question, in the function "int tm6000_cards_setup(struct
tm6000_core *dev)" have you reset gpio 1 and 4, but why? In my lastest
patch I have add a few sticks and it's works with and without this
part.What for sticks use this part? For a week I have become a email
with usbsnoop log from a tm5600 based stick and I have analysed it.
Resume is that I think it use two reset gpio's.

1. GPIO1  = 0
2. GPIO4 = 0
3. wait a few ms
4. GPIO1 = 1
5. GPIO4 = 1

/*
     * Default initialization. Most of the devices seem to use GPIO1
     * and GPIO4.on the same way, so, this handles the common sequence
     * used by most devices.
     * If a device uses a different sequence or different GPIO pins for
     * reset, just add the code at the board-specific part
     */
    for (i = 0; i < 2; i++) {
        rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
                    dev->gpio.tuner_reset, 0x00);
        if (rc < 0) {
            printk(KERN_ERR "Error %i doing GPIO1 reset\n", rc);
            return rc;
        }

        msleep(10); /* Just to be conservative */
        rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
                    dev->gpio.tuner_reset, 0x01);
        if (rc < 0) {
            printk(KERN_ERR "Error %i doing GPIO1 reset\n", rc);
            return rc;
        }

        msleep(10);
        rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_4, 0);
        if (rc < 0) {
            printk(KERN_ERR "Error %i doing GPIO4 reset\n", rc);
            return rc;
        }

        msleep(10);
        rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_4, 1);
        if (rc < 0) {
            printk(KERN_ERR "Error %i doing GPIO4 reset\n", rc);
            return rc;
        }

        if (!i) {
            rc = tm6000_get_reg16(dev, 0x40, 0, 0);
            if (rc >= 0)
                printk(KERN_DEBUG "board=%d\n", rc);
        }
    }

For a week I have become a email with usbsnoop log from a tm5600 based
stick and I have analysed it. Resume is that I think it use two reset
gpio's.

1. GPIO1  = 0
2. GPIO4 = 0
3. wait a few ms
4. GPIO1 = 1
5. GPIO4 = 1

So I think, if it a part from function tm6000_cards_setup is, then is
that part wrong and must remove to tuner_callback function.

Second, I will rewrite the gpio's into a struct.

for example:

in tm6000.h

struct tm6000_gpio {
    int        tuner_reset;
    int        tuner_on;
    int        demod_reset;
    int        demod_on;
    int        power_led;
    int        dvb_led;
    int        ir;
};

in tm6000_card.c

[TM6010_BOARD_TERRATEC_CINERGY_HYBRID_XE] = {
        .name         = "Terratec Cinergy Hybrid XE / Cinergy Hybrid-Stick",
        .tuner_type   = TUNER_XC2028, /* has a XC3028 */
        .tuner_addr   = 0xc2 >> 1,
        .demod_addr   = 0x1e >> 1,
        .type         = TM6010,
        .caps = {
            .has_tuner    = 1,
            .has_dvb    = 1,
            .has_zl10353    = 1,
            .has_eeprom    = 1,
            .has_remote    = 1,
        },
        .gpio = {
            .tuner_reset     = TM6010_GPIO_2,
            .tuner_on    = TM6010_GPIO_3,
            .demod_reset    = TM6010_GPIO_1,
            .demod_on    = TM6010_GPIO_4,
            .power_led    = TM6010_GPIO_7,
            .dvb_led    = TM6010_GPIO_5,
            .ir        = TM6010_GPIO_0,
        },
    },

The rest I send in the patch email. So can the gpio's define in the
board struct and using per label in the functions.

Stefan Ringel

-- 
Stefan Ringel <stefan.ringel@xxxxxxxx>

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux