aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c111
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 */
1822void em28xx_pre_card_setup(struct em28xx *dev) 1822void 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) {