diff options
| -rw-r--r-- | drivers/media/video/gspca/sn9c20x.c | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c index 896cff925fbb..7e71aa2d2522 100644 --- a/drivers/media/video/gspca/sn9c20x.c +++ b/drivers/media/video/gspca/sn9c20x.c | |||
| @@ -1,5 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Sonix sn9c201 sn9c202 library | 2 | * Sonix sn9c201 sn9c202 library |
| 3 | * | ||
| 4 | * Copyright (C) 2012 Jean-Francois Moine <http://moinejf.free.fr> | ||
| 3 | * Copyright (C) 2008-2009 microdia project <microdia@googlegroups.com> | 5 | * Copyright (C) 2008-2009 microdia project <microdia@googlegroups.com> |
| 4 | * Copyright (C) 2009 Brian Johnson <brijohn@gmail.com> | 6 | * Copyright (C) 2009 Brian Johnson <brijohn@gmail.com> |
| 5 | * | 7 | * |
| @@ -33,8 +35,6 @@ MODULE_AUTHOR("Brian Johnson <brijohn@gmail.com>, " | |||
| 33 | MODULE_DESCRIPTION("GSPCA/SN9C20X USB Camera Driver"); | 35 | MODULE_DESCRIPTION("GSPCA/SN9C20X USB Camera Driver"); |
| 34 | MODULE_LICENSE("GPL"); | 36 | MODULE_LICENSE("GPL"); |
| 35 | 37 | ||
| 36 | #define MODULE_NAME "sn9c20x" | ||
| 37 | |||
| 38 | /* | 38 | /* |
| 39 | * Pixel format private data | 39 | * Pixel format private data |
| 40 | */ | 40 | */ |
| @@ -1133,13 +1133,13 @@ static void reg_w(struct gspca_dev *gspca_dev, u16 reg, | |||
| 1133 | 1133 | ||
| 1134 | static void reg_w1(struct gspca_dev *gspca_dev, u16 reg, const u8 value) | 1134 | static void reg_w1(struct gspca_dev *gspca_dev, u16 reg, const u8 value) |
| 1135 | { | 1135 | { |
| 1136 | u8 data[1] = {value}; | 1136 | reg_w(gspca_dev, reg, &value, 1); |
| 1137 | reg_w(gspca_dev, reg, data, 1); | ||
| 1138 | } | 1137 | } |
| 1139 | 1138 | ||
| 1140 | static void i2c_w(struct gspca_dev *gspca_dev, const u8 *buffer) | 1139 | static void i2c_w(struct gspca_dev *gspca_dev, const u8 *buffer) |
| 1141 | { | 1140 | { |
| 1142 | int i; | 1141 | int i; |
| 1142 | |||
| 1143 | reg_w(gspca_dev, 0x10c0, buffer, 8); | 1143 | reg_w(gspca_dev, 0x10c0, buffer, 8); |
| 1144 | for (i = 0; i < 5; i++) { | 1144 | for (i = 0; i < 5; i++) { |
| 1145 | reg_r(gspca_dev, 0x10c0, 1); | 1145 | reg_r(gspca_dev, 0x10c0, 1); |
| @@ -1161,7 +1161,6 @@ static void i2c_w(struct gspca_dev *gspca_dev, const u8 *buffer) | |||
| 1161 | static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val) | 1161 | static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val) |
| 1162 | { | 1162 | { |
| 1163 | struct sd *sd = (struct sd *) gspca_dev; | 1163 | struct sd *sd = (struct sd *) gspca_dev; |
| 1164 | |||
| 1165 | u8 row[8]; | 1164 | u8 row[8]; |
| 1166 | 1165 | ||
| 1167 | /* | 1166 | /* |
| @@ -1201,8 +1200,8 @@ static void i2c_w2(struct gspca_dev *gspca_dev, u8 reg, u16 val) | |||
| 1201 | row[0] = 0x81 | (3 << 4); | 1200 | row[0] = 0x81 | (3 << 4); |
| 1202 | row[1] = sd->i2c_addr; | 1201 | row[1] = sd->i2c_addr; |
| 1203 | row[2] = reg; | 1202 | row[2] = reg; |
| 1204 | row[3] = (val >> 8) & 0xff; | 1203 | row[3] = val >> 8; |
| 1205 | row[4] = val & 0xff; | 1204 | row[4] = val; |
| 1206 | row[5] = 0x00; | 1205 | row[5] = 0x00; |
| 1207 | row[6] = 0x00; | 1206 | row[6] = 0x00; |
| 1208 | row[7] = 0x10; | 1207 | row[7] = 0x10; |
| @@ -1587,8 +1586,9 @@ static void set_hvflip(struct gspca_dev *gspca_dev) | |||
| 1587 | if (vflip) { | 1586 | if (vflip) { |
| 1588 | value |= 0x10; | 1587 | value |= 0x10; |
| 1589 | sd->vstart = 2; | 1588 | sd->vstart = 2; |
| 1590 | } else | 1589 | } else { |
| 1591 | sd->vstart = 3; | 1590 | sd->vstart = 3; |
| 1591 | } | ||
| 1592 | reg_w1(gspca_dev, 0x1182, sd->vstart); | 1592 | reg_w1(gspca_dev, 0x1182, sd->vstart); |
| 1593 | i2c_w1(gspca_dev, 0x1e, value); | 1593 | i2c_w1(gspca_dev, 0x1e, value); |
| 1594 | break; | 1594 | break; |
| @@ -1741,6 +1741,7 @@ static int sd_dbg_g_register(struct gspca_dev *gspca_dev, | |||
| 1741 | struct v4l2_dbg_register *reg) | 1741 | struct v4l2_dbg_register *reg) |
| 1742 | { | 1742 | { |
| 1743 | struct sd *sd = (struct sd *) gspca_dev; | 1743 | struct sd *sd = (struct sd *) gspca_dev; |
| 1744 | |||
| 1744 | switch (reg->match.type) { | 1745 | switch (reg->match.type) { |
| 1745 | case V4L2_CHIP_MATCH_HOST: | 1746 | case V4L2_CHIP_MATCH_HOST: |
| 1746 | if (reg->match.addr != 0) | 1747 | if (reg->match.addr != 0) |
| @@ -1768,6 +1769,7 @@ static int sd_dbg_s_register(struct gspca_dev *gspca_dev, | |||
| 1768 | struct v4l2_dbg_register *reg) | 1769 | struct v4l2_dbg_register *reg) |
| 1769 | { | 1770 | { |
| 1770 | struct sd *sd = (struct sd *) gspca_dev; | 1771 | struct sd *sd = (struct sd *) gspca_dev; |
| 1772 | |||
| 1771 | switch (reg->match.type) { | 1773 | switch (reg->match.type) { |
| 1772 | case V4L2_CHIP_MATCH_HOST: | 1774 | case V4L2_CHIP_MATCH_HOST: |
| 1773 | if (reg->match.addr != 0) | 1775 | if (reg->match.addr != 0) |
| @@ -1822,9 +1824,9 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
| 1822 | cam = &gspca_dev->cam; | 1824 | cam = &gspca_dev->cam; |
| 1823 | cam->needs_full_bandwidth = 1; | 1825 | cam->needs_full_bandwidth = 1; |
| 1824 | 1826 | ||
| 1825 | sd->sensor = (id->driver_info >> 8) & 0xff; | 1827 | sd->sensor = id->driver_info >> 8; |
| 1826 | sd->i2c_addr = id->driver_info & 0xff; | 1828 | sd->i2c_addr = id->driver_info; |
| 1827 | sd->flags = (id->driver_info >> 16) & 0xff; | 1829 | sd->flags = id->driver_info >> 16; |
| 1828 | 1830 | ||
| 1829 | switch (sd->sensor) { | 1831 | switch (sd->sensor) { |
| 1830 | case SENSOR_MT9M112: | 1832 | case SENSOR_MT9M112: |
| @@ -1918,6 +1920,7 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
| 1918 | mt9v_init_sensor(gspca_dev); | 1920 | mt9v_init_sensor(gspca_dev); |
| 1919 | if (gspca_dev->usb_err < 0) | 1921 | if (gspca_dev->usb_err < 0) |
| 1920 | break; | 1922 | break; |
| 1923 | pr_info("MT9VPRB sensor detected\n"); | ||
| 1921 | break; | 1924 | break; |
| 1922 | case SENSOR_MT9M111: | 1925 | case SENSOR_MT9M111: |
| 1923 | mt9m111_init_sensor(gspca_dev); | 1926 | mt9m111_init_sensor(gspca_dev); |
| @@ -1943,7 +1946,7 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
| 1943 | pr_info("HV7131R sensor detected\n"); | 1946 | pr_info("HV7131R sensor detected\n"); |
| 1944 | break; | 1947 | break; |
| 1945 | default: | 1948 | default: |
| 1946 | pr_info("Unsupported Sensor\n"); | 1949 | pr_err("Unsupported sensor\n"); |
| 1947 | gspca_dev->usb_err = -ENODEV; | 1950 | gspca_dev->usb_err = -ENODEV; |
| 1948 | } | 1951 | } |
| 1949 | 1952 | ||
| @@ -1954,6 +1957,7 @@ static void configure_sensor_output(struct gspca_dev *gspca_dev, int mode) | |||
| 1954 | { | 1957 | { |
| 1955 | struct sd *sd = (struct sd *) gspca_dev; | 1958 | struct sd *sd = (struct sd *) gspca_dev; |
| 1956 | u8 value; | 1959 | u8 value; |
| 1960 | |||
| 1957 | switch (sd->sensor) { | 1961 | switch (sd->sensor) { |
| 1958 | case SENSOR_SOI968: | 1962 | case SENSOR_SOI968: |
| 1959 | if (mode & MODE_SXGA) { | 1963 | if (mode & MODE_SXGA) { |
| @@ -2036,6 +2040,7 @@ static int sd_isoc_init(struct gspca_dev *gspca_dev) | |||
| 2036 | break; | 2040 | break; |
| 2037 | default: /* >= 640x480 */ | 2041 | default: /* >= 640x480 */ |
| 2038 | gspca_dev->alt = 9; | 2042 | gspca_dev->alt = 9; |
| 2043 | break; | ||
| 2039 | } | 2044 | } |
| 2040 | } | 2045 | } |
| 2041 | 2046 | ||
| @@ -2242,15 +2247,15 @@ static int sd_int_pkt_scan(struct gspca_dev *gspca_dev, | |||
| 2242 | int len) /* interrupt packet length */ | 2247 | int len) /* interrupt packet length */ |
| 2243 | { | 2248 | { |
| 2244 | struct sd *sd = (struct sd *) gspca_dev; | 2249 | struct sd *sd = (struct sd *) gspca_dev; |
| 2245 | int ret = -EINVAL; | 2250 | |
| 2246 | if (!(sd->flags & HAS_NO_BUTTON) && len == 1) { | 2251 | if (!(sd->flags & HAS_NO_BUTTON) && len == 1) { |
| 2247 | input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); | 2252 | input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); |
| 2248 | input_sync(gspca_dev->input_dev); | 2253 | input_sync(gspca_dev->input_dev); |
| 2249 | input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); | 2254 | input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); |
| 2250 | input_sync(gspca_dev->input_dev); | 2255 | input_sync(gspca_dev->input_dev); |
| 2251 | ret = 0; | 2256 | return 0; |
| 2252 | } | 2257 | } |
| 2253 | return ret; | 2258 | return -EINVAL; |
| 2254 | } | 2259 | } |
| 2255 | #endif | 2260 | #endif |
| 2256 | 2261 | ||
| @@ -2303,9 +2308,11 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
| 2303 | int len) /* iso packet length */ | 2308 | int len) /* iso packet length */ |
| 2304 | { | 2309 | { |
| 2305 | struct sd *sd = (struct sd *) gspca_dev; | 2310 | struct sd *sd = (struct sd *) gspca_dev; |
| 2306 | int avg_lum; | ||
