[media] gspca - sonixj: Move bridge init to sd start

Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by Jean-Francois Moine and committed by Mauro Carvalho Chehab 5e68f400 692e42df

+129 -136
+129 -136
drivers/media/video/gspca/sonixj.c
··· 1755 } 1756 } 1757 1758 - static void bridge_init(struct gspca_dev *gspca_dev, 1759 - const u8 *sn9c1xx) 1760 - { 1761 - struct sd *sd = (struct sd *) gspca_dev; 1762 - u8 reg0102[2]; 1763 - const u8 *reg9a; 1764 - static const u8 reg9a_def[] = 1765 - {0x00, 0x40, 0x20, 0x00, 0x00, 0x00}; 1766 - static const u8 reg9a_spec[] = 1767 - {0x00, 0x40, 0x38, 0x30, 0x00, 0x20}; 1768 - static const u8 regd4[] = {0x60, 0x00, 0x00}; 1769 - 1770 - /* sensor clock already enabled in sd_init */ 1771 - /* reg_w1(gspca_dev, 0xf1, 0x00); */ 1772 - reg_w1(gspca_dev, 0x01, sn9c1xx[1]); 1773 - 1774 - /* configure gpio */ 1775 - reg0102[0] = sn9c1xx[1]; 1776 - reg0102[1] = sn9c1xx[2]; 1777 - if (gspca_dev->audio) 1778 - reg0102[1] |= 0x04; /* keep the audio connection */ 1779 - reg_w(gspca_dev, 0x01, reg0102, 2); 1780 - reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2); 1781 - reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 5); 1782 - switch (sd->sensor) { 1783 - case SENSOR_GC0307: 1784 - case SENSOR_OV7660: 1785 - case SENSOR_PO1030: 1786 - case SENSOR_PO2030N: 1787 - case SENSOR_SOI768: 1788 - case SENSOR_SP80708: 1789 - reg9a = reg9a_spec; 1790 - break; 1791 - default: 1792 - reg9a = reg9a_def; 1793 - break; 1794 - } 1795 - reg_w(gspca_dev, 0x9a, reg9a, 6); 1796 - 1797 - reg_w(gspca_dev, 0xd4, regd4, sizeof regd4); 1798 - 1799 - reg_w(gspca_dev, 0x03, &sn9c1xx[3], 0x0f); 1800 - 1801 - switch (sd->sensor) { 1802 - case SENSOR_ADCM1700: 1803 - reg_w1(gspca_dev, 0x01, 0x43); 1804 - reg_w1(gspca_dev, 0x17, 0x62); 1805 - reg_w1(gspca_dev, 0x01, 0x42); 1806 - reg_w1(gspca_dev, 0x01, 0x42); 1807 - break; 1808 - case SENSOR_GC0307: 1809 - msleep(50); 1810 - reg_w1(gspca_dev, 0x01, 0x61); 1811 - reg_w1(gspca_dev, 0x17, 0x22); 1812 - reg_w1(gspca_dev, 0x01, 0x60); 1813 - reg_w1(gspca_dev, 0x01, 0x40); 1814 - msleep(50); 1815 - break; 1816 - case SENSOR_MI0360B: 1817 - reg_w1(gspca_dev, 0x01, 0x61); 1818 - reg_w1(gspca_dev, 0x17, 0x60); 1819 - reg_w1(gspca_dev, 0x01, 0x60); 1820 - reg_w1(gspca_dev, 0x01, 0x40); 1821 - break; 1822 - case SENSOR_MT9V111: 1823 - reg_w1(gspca_dev, 0x01, 0x61); 1824 - reg_w1(gspca_dev, 0x17, 0x61); 1825 - reg_w1(gspca_dev, 0x01, 0x60); 1826 - reg_w1(gspca_dev, 0x01, 0x40); 1827 - break; 1828 - case SENSOR_OM6802: 1829 - msleep(10); 1830 - reg_w1(gspca_dev, 0x02, 0x73); 1831 - reg_w1(gspca_dev, 0x17, 0x60); 1832 - reg_w1(gspca_dev, 0x01, 0x22); 1833 - msleep(100); 1834 - reg_w1(gspca_dev, 0x01, 0x62); 1835 - reg_w1(gspca_dev, 0x17, 0x64); 1836 - reg_w1(gspca_dev, 0x17, 0x64); 1837 - reg_w1(gspca_dev, 0x01, 0x42); 1838 - msleep(10); 1839 - reg_w1(gspca_dev, 0x01, 0x42); 1840 - i2c_w8(gspca_dev, om6802_init0[0]); 1841 - i2c_w8(gspca_dev, om6802_init0[1]); 1842 - msleep(15); 1843 - reg_w1(gspca_dev, 0x02, 0x71); 1844 - msleep(150); 1845 - break; 1846 - case SENSOR_OV7630: 1847 - reg_w1(gspca_dev, 0x01, 0x61); 1848 - reg_w1(gspca_dev, 0x17, 0xe2); 1849 - reg_w1(gspca_dev, 0x01, 0x60); 1850 - reg_w1(gspca_dev, 0x01, 0x40); 1851 - break; 1852 - case SENSOR_OV7648: 1853 - reg_w1(gspca_dev, 0x01, 0x63); 1854 - reg_w1(gspca_dev, 0x17, 0x20); 1855 - reg_w1(gspca_dev, 0x01, 0x62); 1856 - reg_w1(gspca_dev, 0x01, 0x42); 1857 - break; 1858 - case SENSOR_PO1030: 1859 - case SENSOR_SOI768: 1860 - reg_w1(gspca_dev, 0x01, 0x61); 1861 - reg_w1(gspca_dev, 0x17, 0x20); 1862 - reg_w1(gspca_dev, 0x01, 0x60); 1863 - reg_w1(gspca_dev, 0x01, 0x40); 1864 - break; 1865 - case SENSOR_PO2030N: 1866 - case SENSOR_OV7660: 1867 - reg_w1(gspca_dev, 0x01, 0x63); 1868 - reg_w1(gspca_dev, 0x17, 0x20); 1869 - reg_w1(gspca_dev, 0x01, 0x62); 1870 - reg_w1(gspca_dev, 0x01, 0x42); 1871 - break; 1872 - case SENSOR_SP80708: 1873 - reg_w1(gspca_dev, 0x01, 0x63); 1874 - reg_w1(gspca_dev, 0x17, 0x20); 1875 - reg_w1(gspca_dev, 0x01, 0x62); 1876 - reg_w1(gspca_dev, 0x01, 0x42); 1877 - msleep(100); 1878 - reg_w1(gspca_dev, 0x02, 0x62); 1879 - break; 1880 - default: 1881 - /* case SENSOR_HV7131R: */ 1882 - /* case SENSOR_MI0360: */ 1883 - /* case SENSOR_MO4000: */ 1884 - reg_w1(gspca_dev, 0x01, 0x43); 1885 - reg_w1(gspca_dev, 0x17, 0x61); 1886 - reg_w1(gspca_dev, 0x01, 0x42); 1887 - if (sd->sensor == SENSOR_HV7131R) 1888 - hv7131r_probe(gspca_dev); 1889 - break; 1890 - } 1891 - } 1892 - 1893 /* this function is called at probe time */ 1894 static int sd_config(struct gspca_dev *gspca_dev, 1895 const struct usb_device_id *id) ··· 2288 { 2289 struct sd *sd = (struct sd *) gspca_dev; 2290 int i; 2291 u8 reg1, reg17; 2292 const u8 *sn9c1xx; 2293 const u8 (*init)[8]; 2294 int mode; 2295 static const u8 C0[] = { 0x2d, 0x2d, 0x3a, 0x05, 0x04, 0x3f }; 2296 static const u8 CA[] = { 0x28, 0xd8, 0x14, 0xec }; 2297 static const u8 CA_adcm1700[] = ··· 2320 2321 /* initialize the bridge */ 2322 sn9c1xx = sn_tb[sd->sensor]; 2323 - bridge_init(gspca_dev, sn9c1xx); 2324 2325 /* initialize the sensor */ 2326 i2c_w_seq(gspca_dev, sensor_init[sd->sensor]);
··· 1755 } 1756 } 1757 1758 /* this function is called at probe time */ 1759 static int sd_config(struct gspca_dev *gspca_dev, 1760 const struct usb_device_id *id) ··· 2423 { 2424 struct sd *sd = (struct sd *) gspca_dev; 2425 int i; 2426 + u8 reg0102[2]; 2427 + const u8 *reg9a; 2428 u8 reg1, reg17; 2429 const u8 *sn9c1xx; 2430 const u8 (*init)[8]; 2431 int mode; 2432 + static const u8 reg9a_def[] = 2433 + {0x00, 0x40, 0x20, 0x00, 0x00, 0x00}; 2434 + static const u8 reg9a_spec[] = 2435 + {0x00, 0x40, 0x38, 0x30, 0x00, 0x20}; 2436 + static const u8 regd4[] = {0x60, 0x00, 0x00}; 2437 static const u8 C0[] = { 0x2d, 0x2d, 0x3a, 0x05, 0x04, 0x3f }; 2438 static const u8 CA[] = { 0x28, 0xd8, 0x14, 0xec }; 2439 static const u8 CA_adcm1700[] = ··· 2448 2449 /* initialize the bridge */ 2450 sn9c1xx = sn_tb[sd->sensor]; 2451 + 2452 + /* sensor clock already enabled in sd_init */ 2453 + /* reg_w1(gspca_dev, 0xf1, 0x00); */ 2454 + reg_w1(gspca_dev, 0x01, sn9c1xx[1]); 2455 + 2456 + /* configure gpio */ 2457 + reg0102[0] = sn9c1xx[1]; 2458 + reg0102[1] = sn9c1xx[2]; 2459 + if (gspca_dev->audio) 2460 + reg0102[1] |= 0x04; /* keep the audio connection */ 2461 + reg_w(gspca_dev, 0x01, reg0102, 2); 2462 + reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2); 2463 + reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 5); 2464 + switch (sd->sensor) { 2465 + case SENSOR_GC0307: 2466 + case SENSOR_OV7660: 2467 + case SENSOR_PO1030: 2468 + case SENSOR_PO2030N: 2469 + case SENSOR_SOI768: 2470 + case SENSOR_SP80708: 2471 + reg9a = reg9a_spec; 2472 + break; 2473 + default: 2474 + reg9a = reg9a_def; 2475 + break; 2476 + } 2477 + reg_w(gspca_dev, 0x9a, reg9a, 6); 2478 + 2479 + reg_w(gspca_dev, 0xd4, regd4, sizeof regd4); 2480 + 2481 + reg_w(gspca_dev, 0x03, &sn9c1xx[3], 0x0f); 2482 + 2483 + switch (sd->sensor) { 2484 + case SENSOR_ADCM1700: 2485 + reg_w1(gspca_dev, 0x01, 0x43); 2486 + reg_w1(gspca_dev, 0x17, 0x62); 2487 + reg_w1(gspca_dev, 0x01, 0x42); 2488 + reg_w1(gspca_dev, 0x01, 0x42); 2489 + break; 2490 + case SENSOR_GC0307: 2491 + msleep(50); 2492 + reg_w1(gspca_dev, 0x01, 0x61); 2493 + reg_w1(gspca_dev, 0x17, 0x22); 2494 + reg_w1(gspca_dev, 0x01, 0x60); 2495 + reg_w1(gspca_dev, 0x01, 0x40); 2496 + msleep(50); 2497 + break; 2498 + case SENSOR_MI0360B: 2499 + reg_w1(gspca_dev, 0x01, 0x61); 2500 + reg_w1(gspca_dev, 0x17, 0x60); 2501 + reg_w1(gspca_dev, 0x01, 0x60); 2502 + reg_w1(gspca_dev, 0x01, 0x40); 2503 + break; 2504 + case SENSOR_MT9V111: 2505 + reg_w1(gspca_dev, 0x01, 0x61); 2506 + reg_w1(gspca_dev, 0x17, 0x61); 2507 + reg_w1(gspca_dev, 0x01, 0x60); 2508 + reg_w1(gspca_dev, 0x01, 0x40); 2509 + break; 2510 + case SENSOR_OM6802: 2511 + msleep(10); 2512 + reg_w1(gspca_dev, 0x02, 0x73); 2513 + reg_w1(gspca_dev, 0x17, 0x60); 2514 + reg_w1(gspca_dev, 0x01, 0x22); 2515 + msleep(100); 2516 + reg_w1(gspca_dev, 0x01, 0x62); 2517 + reg_w1(gspca_dev, 0x17, 0x64); 2518 + reg_w1(gspca_dev, 0x17, 0x64); 2519 + reg_w1(gspca_dev, 0x01, 0x42); 2520 + msleep(10); 2521 + reg_w1(gspca_dev, 0x01, 0x42); 2522 + i2c_w8(gspca_dev, om6802_init0[0]); 2523 + i2c_w8(gspca_dev, om6802_init0[1]); 2524 + msleep(15); 2525 + reg_w1(gspca_dev, 0x02, 0x71); 2526 + msleep(150); 2527 + break; 2528 + case SENSOR_OV7630: 2529 + reg_w1(gspca_dev, 0x01, 0x61); 2530 + reg_w1(gspca_dev, 0x17, 0xe2); 2531 + reg_w1(gspca_dev, 0x01, 0x60); 2532 + reg_w1(gspca_dev, 0x01, 0x40); 2533 + break; 2534 + case SENSOR_OV7648: 2535 + reg_w1(gspca_dev, 0x01, 0x63); 2536 + reg_w1(gspca_dev, 0x17, 0x20); 2537 + reg_w1(gspca_dev, 0x01, 0x62); 2538 + reg_w1(gspca_dev, 0x01, 0x42); 2539 + break; 2540 + case SENSOR_PO1030: 2541 + case SENSOR_SOI768: 2542 + reg_w1(gspca_dev, 0x01, 0x61); 2543 + reg_w1(gspca_dev, 0x17, 0x20); 2544 + reg_w1(gspca_dev, 0x01, 0x60); 2545 + reg_w1(gspca_dev, 0x01, 0x40); 2546 + break; 2547 + case SENSOR_PO2030N: 2548 + case SENSOR_OV7660: 2549 + reg_w1(gspca_dev, 0x01, 0x63); 2550 + reg_w1(gspca_dev, 0x17, 0x20); 2551 + reg_w1(gspca_dev, 0x01, 0x62); 2552 + reg_w1(gspca_dev, 0x01, 0x42); 2553 + break; 2554 + case SENSOR_SP80708: 2555 + reg_w1(gspca_dev, 0x01, 0x63); 2556 + reg_w1(gspca_dev, 0x17, 0x20); 2557 + reg_w1(gspca_dev, 0x01, 0x62); 2558 + reg_w1(gspca_dev, 0x01, 0x42); 2559 + msleep(100); 2560 + reg_w1(gspca_dev, 0x02, 0x62); 2561 + break; 2562 + default: 2563 + /* case SENSOR_HV7131R: */ 2564 + /* case SENSOR_MI0360: */ 2565 + /* case SENSOR_MO4000: */ 2566 + reg_w1(gspca_dev, 0x01, 0x43); 2567 + reg_w1(gspca_dev, 0x17, 0x61); 2568 + reg_w1(gspca_dev, 0x01, 0x42); 2569 + if (sd->sensor == SENSOR_HV7131R) 2570 + hv7131r_probe(gspca_dev); 2571 + break; 2572 + } 2573 2574 /* initialize the sensor */ 2575 i2c_w_seq(gspca_dev, sensor_init[sd->sensor]);