diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 111 |
1 files changed, 53 insertions, 58 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index fc46032bfe27..6b2b5d3e2fad 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
@@ -1821,63 +1821,6 @@ static int em28xx_hint_sensor(struct em28xx *dev) | |||
1821 | */ | 1821 | */ |
1822 | void em28xx_pre_card_setup(struct em28xx *dev) | 1822 | void em28xx_pre_card_setup(struct em28xx *dev) |
1823 | { | 1823 | { |
1824 | int rc; | ||
1825 | |||
1826 | em28xx_set_model(dev); | ||
1827 | |||
1828 | em28xx_info("Identified as %s (card=%d)\n", | ||
1829 | dev->board.name, dev->model); | ||
1830 | |||
1831 | /* Set the default GPO/GPIO for legacy devices */ | ||
1832 | dev->reg_gpo_num = EM2880_R04_GPO; | ||
1833 | dev->reg_gpio_num = EM28XX_R08_GPIO; | ||
1834 | |||
1835 | dev->wait_after_write = 5; | ||
1836 | |||
1837 | /* Based on the Chip ID, set the device configuration */ | ||
1838 | rc = em28xx_read_reg(dev, EM28XX_R0A_CHIPID); | ||
1839 | if (rc > 0) { | ||
1840 | dev->chip_id = rc; | ||
1841 | |||
1842 | switch (dev->chip_id) { | ||
1843 | case CHIP_ID_EM2710: | ||
1844 | em28xx_info("chip ID is em2710\n"); | ||
1845 | break; | ||
1846 | case CHIP_ID_EM2750: | ||
1847 | em28xx_info("chip ID is em2750\n"); | ||
1848 | break; | ||
1849 | case CHIP_ID_EM2820: | ||
1850 | em28xx_info("chip ID is em2820 (or em2710)\n"); | ||
1851 | break; | ||
1852 | case CHIP_ID_EM2840: | ||
1853 | em28xx_info("chip ID is em2840\n"); | ||
1854 | break; | ||
1855 | case CHIP_ID_EM2860: | ||
1856 | em28xx_info("chip ID is em2860\n"); | ||
1857 | break; | ||
1858 | case CHIP_ID_EM2870: | ||
1859 | em28xx_info("chip ID is em2870\n"); | ||
1860 | dev->wait_after_write = 0; | ||
1861 | break; | ||
1862 | case CHIP_ID_EM2874: | ||
1863 | em28xx_info("chip ID is em2874\n"); | ||
1864 | dev->reg_gpio_num = EM2874_R80_GPIO; | ||
1865 | dev->wait_after_write = 0; | ||
1866 | break; | ||
1867 | case CHIP_ID_EM2883: | ||
1868 | em28xx_info("chip ID is em2882/em2883\n"); | ||
1869 | dev->wait_after_write = 0; | ||
1870 | break; | ||
1871 | default: | ||
1872 | em28xx_info("em28xx chip ID = %d\n", dev->chip_id); | ||
1873 | } | ||
1874 | } | ||
1875 | |||
1876 | /* Prepopulate cached GPO register content */ | ||
1877 | rc = em28xx_read_reg(dev, dev->reg_gpo_num); | ||
1878 | if (rc >= 0) | ||
1879 | dev->reg_gpo = rc; | ||
1880 | |||
1881 | /* Set the initial XCLK and I2C clock values based on the board | 1824 | /* Set the initial XCLK and I2C clock values based on the board |
1882 | definition */ | 1825 | definition */ |
1883 | em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk & 0x7f); | 1826 | em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk & 0x7f); |
@@ -2443,7 +2386,7 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev, | |||
2443 | int minor) | 2386 | int minor) |
2444 | { | 2387 | { |
2445 | struct em28xx *dev = *devhandle; | 2388 | struct em28xx *dev = *devhandle; |
2446 | int retval = -ENOMEM; | 2389 | int retval; |
2447 | int errCode; | 2390 | int errCode; |
2448 | 2391 | ||
2449 | dev->udev = udev; | 2392 | dev->udev = udev; |
@@ -2460,6 +2403,58 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev, | |||
2460 | dev->em28xx_read_reg_req = em28xx_read_reg_req; | 2403 | dev->em28xx_read_reg_req = em28xx_read_reg_req; |
2461 | dev->board.is_em2800 = em28xx_boards[dev->model].is_em2800; | 2404 | dev->board.is_em2800 = em28xx_boards[dev->model].is_em2800; |
2462 | 2405 | ||
2406 | em28xx_set_model(dev); | ||
2407 | |||
2408 | /* Set the default GPO/GPIO for legacy devices */ | ||
2409 | dev->reg_gpo_num = EM2880_R04_GPO; | ||
2410 | dev->reg_gpio_num = EM28XX_R08_GPIO; | ||
2411 | |||
2412 | dev->wait_after_write = 5; | ||
2413 | |||
2414 | /* Based on the Chip ID, set the device configuration */ | ||
2415 | retval = em28xx_read_reg(dev, EM28XX_R0A_CHIPID); | ||
2416 | if (retval > 0) { | ||
2417 | dev->chip_id = retval; | ||
2418 | |||
2419 | switch (dev->chip_id) { | ||
2420 | case CHIP_ID_EM2710: | ||
2421 | em28xx_info("chip ID is em2710\n"); | ||
2422 | break; | ||
2423 | case CHIP_ID_EM2750: | ||
2424 | em28xx_info("chip ID is em2750\n"); | ||
2425 | break; | ||
2426 | case CHIP_ID_EM2820: | ||
2427 | em28xx_info("chip ID is em2820 (or em2710)\n"); | ||
2428 | break; | ||
2429 | case CHIP_ID_EM2840: | ||
2430 | em28xx_info("chip ID is em2840\n"); | ||
2431 | break; | ||
2432 | case CHIP_ID_EM2860: | ||
2433 | em28xx_info("chip ID is em2860\n"); | ||
2434 | break; | ||
2435 | case CHIP_ID_EM2870: | ||
2436 | em28xx_info("chip ID is em2870\n"); | ||
2437 | dev->wait_after_write = 0; | ||
2438 | break; | ||
2439 | case CHIP_ID_EM2874: | ||
2440 | em28xx_info("chip ID is em2874\n"); | ||
2441 | dev->reg_gpio_num = EM2874_R80_GPIO; | ||
2442 | dev->wait_after_write = 0; | ||
2443 | break; | ||
2444 | case CHIP_ID_EM2883: | ||
2445 | em28xx_info("chip ID is em2882/em2883\n"); | ||
2446 | dev->wait_after_write = 0; | ||
2447 | break; | ||
2448 | default: | ||
2449 | em28xx_info("em28xx chip ID = %d\n", dev->chip_id); | ||
2450 | } | ||
2451 | } | ||
2452 | |||
2453 | /* Prepopulate cached GPO register content */ | ||
2454 | retval = em28xx_read_reg(dev, dev->reg_gpo_num); | ||
2455 | if (retval >= 0) | ||
2456 | dev->reg_gpo = retval; | ||
2457 | |||
2463 | em28xx_pre_card_setup(dev); | 2458 | em28xx_pre_card_setup(dev); |
2464 | 2459 | ||
2465 | if (!dev->board.is_em2800) { | 2460 | if (!dev->board.is_em2800) { |