V4L/DVB (12238): em28xx: call sensor detection code for all webcam entries
[safe/jmp/linux-2.6] / drivers / media / video / em28xx / em28xx-cards.c
index 530170a..1318766 100644 (file)
@@ -234,6 +234,7 @@ struct em28xx_board em28xx_boards[] = {
        [EM2820_BOARD_UNKNOWN] = {
                .name          = "Unknown EM2750/28xx video grabber",
                .tuner_type    = TUNER_ABSENT,
+               .is_webcam     = 1,     /* To enable sensor probe */
        },
        [EM2750_BOARD_DLCW_130] = {
                /* Beijing Huaqi Information Digital Technology Co., Ltd */
@@ -1719,10 +1720,6 @@ static int em28xx_hint_sensor(struct em28xx *dev)
        __be16 version_be;
        u16 version;
 
-       if (dev->model != EM2820_BOARD_UNKNOWN &&
-           dev->model != EM2750_BOARD_UNKNOWN)
-               return 0;
-
        dev->i2c_client.addr = 0xba >> 1;
        cmd = 0;
        i2c_master_send(&dev->i2c_client, &cmd, 1);
@@ -1777,10 +1774,7 @@ void em28xx_pre_card_setup(struct em28xx *dev)
                        em28xx_info("chip ID is em2750\n");
                        break;
                case CHIP_ID_EM2820:
-                       if (dev->board.is_webcam)
-                               em28xx_info("chip is em2710\n");
-                       else
-                               em28xx_info("chip ID is em2820\n");
+                       em28xx_info("chip ID is em2710 or em2820\n");
                        break;
                case CHIP_ID_EM2840:
                        em28xx_info("chip ID is em2840\n");
@@ -2415,7 +2409,13 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
                return errCode;
        }
 
-       em28xx_hint_sensor(dev);
+       /*
+        * If the device can be a webcam, seek for a sensor.
+        * If sensor is not found, then it isn't a webcam.
+        */
+       if (dev->board.is_webcam)
+               if (em28xx_hint_sensor(dev) < 0)
+                       dev->board.is_webcam = 0;
 
        /* Do board specific init and eeprom reading */
        em28xx_card_setup(dev);