Loading drivers/media/video/em28xx/em28xx-cards.c +44 −0 Original line number Original line Diff line number Diff line Loading @@ -58,6 +58,8 @@ static unsigned int card[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET }; module_param_array(card, int, NULL, 0444); module_param_array(card, int, NULL, 0444); MODULE_PARM_DESC(card, "card type"); MODULE_PARM_DESC(card, "card type"); #define MT9V011_VERSION 0x8243 /* Bitmask marking allocated devices from 0 to EM28XX_MAXBOARDS */ /* Bitmask marking allocated devices from 0 to EM28XX_MAXBOARDS */ static unsigned long em28xx_devused; static unsigned long em28xx_devused; Loading Loading @@ -1702,6 +1704,46 @@ static inline void em28xx_set_model(struct em28xx *dev) EM28XX_I2C_FREQ_100_KHZ; EM28XX_I2C_FREQ_100_KHZ; } } /* HINT method: webcam I2C chips * * This method work for webcams with Micron sensors */ static int em28xx_hint_sensor(struct em28xx *dev) { int rc; char *sensor_name; unsigned char cmd; __be16 version_be; u16 version; if (dev->model != EM2820_BOARD_UNKNOWN) return 0; dev->i2c_client.addr = 0xba >> 1; cmd = 0; i2c_master_send(&dev->i2c_client, &cmd, 1); rc = i2c_master_recv(&dev->i2c_client, (char *)&version_be, 2); if (rc != 2) return -EINVAL; version = be16_to_cpu(version_be); switch (version) { case MT9V011_VERSION: dev->model = EM2820_BOARD_SILVERCREST_WEBCAM; sensor_name = "mt9v011"; break; default: printk("Unknown Sensor 0x%04x\n", be16_to_cpu(version)); return -EINVAL; } em28xx_errdev("Sensor is %s, assuming that webcam is %s\n", sensor_name, em28xx_boards[dev->model].name); return 0; } /* Since em28xx_pre_card_setup() requires a proper dev->model, /* Since em28xx_pre_card_setup() requires a proper dev->model, * this won't work for boards with generic PCI IDs * this won't work for boards with generic PCI IDs */ */ Loading Loading @@ -2368,6 +2410,8 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev, return errCode; return errCode; } } em28xx_hint_sensor(dev); /* Do board specific init and eeprom reading */ /* Do board specific init and eeprom reading */ em28xx_card_setup(dev); em28xx_card_setup(dev); Loading drivers/media/video/em28xx/em28xx-i2c.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -483,7 +483,7 @@ static char *i2c_devs[128] = { [0xa0 >> 1] = "eeprom", [0xa0 >> 1] = "eeprom", [0xb0 >> 1] = "tda9874", [0xb0 >> 1] = "tda9874", [0xb8 >> 1] = "tvp5150a", [0xb8 >> 1] = "tvp5150a", [0xba >> 1] = "tvp5150a", [0xba >> 1] = "webcam sensor or tvp5150a", [0xc0 >> 1] = "tuner (analog)", [0xc0 >> 1] = "tuner (analog)", [0xc2 >> 1] = "tuner (analog)", [0xc2 >> 1] = "tuner (analog)", [0xc4 >> 1] = "tuner (analog)", [0xc4 >> 1] = "tuner (analog)", Loading Loading
drivers/media/video/em28xx/em28xx-cards.c +44 −0 Original line number Original line Diff line number Diff line Loading @@ -58,6 +58,8 @@ static unsigned int card[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET }; module_param_array(card, int, NULL, 0444); module_param_array(card, int, NULL, 0444); MODULE_PARM_DESC(card, "card type"); MODULE_PARM_DESC(card, "card type"); #define MT9V011_VERSION 0x8243 /* Bitmask marking allocated devices from 0 to EM28XX_MAXBOARDS */ /* Bitmask marking allocated devices from 0 to EM28XX_MAXBOARDS */ static unsigned long em28xx_devused; static unsigned long em28xx_devused; Loading Loading @@ -1702,6 +1704,46 @@ static inline void em28xx_set_model(struct em28xx *dev) EM28XX_I2C_FREQ_100_KHZ; EM28XX_I2C_FREQ_100_KHZ; } } /* HINT method: webcam I2C chips * * This method work for webcams with Micron sensors */ static int em28xx_hint_sensor(struct em28xx *dev) { int rc; char *sensor_name; unsigned char cmd; __be16 version_be; u16 version; if (dev->model != EM2820_BOARD_UNKNOWN) return 0; dev->i2c_client.addr = 0xba >> 1; cmd = 0; i2c_master_send(&dev->i2c_client, &cmd, 1); rc = i2c_master_recv(&dev->i2c_client, (char *)&version_be, 2); if (rc != 2) return -EINVAL; version = be16_to_cpu(version_be); switch (version) { case MT9V011_VERSION: dev->model = EM2820_BOARD_SILVERCREST_WEBCAM; sensor_name = "mt9v011"; break; default: printk("Unknown Sensor 0x%04x\n", be16_to_cpu(version)); return -EINVAL; } em28xx_errdev("Sensor is %s, assuming that webcam is %s\n", sensor_name, em28xx_boards[dev->model].name); return 0; } /* Since em28xx_pre_card_setup() requires a proper dev->model, /* Since em28xx_pre_card_setup() requires a proper dev->model, * this won't work for boards with generic PCI IDs * this won't work for boards with generic PCI IDs */ */ Loading Loading @@ -2368,6 +2410,8 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev, return errCode; return errCode; } } em28xx_hint_sensor(dev); /* Do board specific init and eeprom reading */ /* Do board specific init and eeprom reading */ em28xx_card_setup(dev); em28xx_card_setup(dev); Loading
drivers/media/video/em28xx/em28xx-i2c.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -483,7 +483,7 @@ static char *i2c_devs[128] = { [0xa0 >> 1] = "eeprom", [0xa0 >> 1] = "eeprom", [0xb0 >> 1] = "tda9874", [0xb0 >> 1] = "tda9874", [0xb8 >> 1] = "tvp5150a", [0xb8 >> 1] = "tvp5150a", [0xba >> 1] = "tvp5150a", [0xba >> 1] = "webcam sensor or tvp5150a", [0xc0 >> 1] = "tuner (analog)", [0xc0 >> 1] = "tuner (analog)", [0xc2 >> 1] = "tuner (analog)", [0xc2 >> 1] = "tuner (analog)", [0xc4 >> 1] = "tuner (analog)", [0xc4 >> 1] = "tuner (analog)", Loading