diff options
-rw-r--r-- | drivers/media/video/gspca/sonixj.c | 59 |
1 files changed, 28 insertions, 31 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c index e58ac891b208..3f8a73e0aca9 100644 --- a/drivers/media/video/gspca/sonixj.c +++ b/drivers/media/video/gspca/sonixj.c | |||
@@ -62,7 +62,6 @@ struct sd { | |||
62 | #define BRIDGE_SN9C105 1 | 62 | #define BRIDGE_SN9C105 1 |
63 | #define BRIDGE_SN9C110 2 | 63 | #define BRIDGE_SN9C110 2 |
64 | #define BRIDGE_SN9C120 3 | 64 | #define BRIDGE_SN9C120 3 |
65 | #define BRIDGE_SN9C325 4 | ||
66 | u8 sensor; /* Type of image sensor chip */ | 65 | u8 sensor; /* Type of image sensor chip */ |
67 | #define SENSOR_HV7131R 0 | 66 | #define SENSOR_HV7131R 0 |
68 | #define SENSOR_MI0360 1 | 67 | #define SENSOR_MI0360 1 |
@@ -354,9 +353,9 @@ static const u8 sn_ov7648[0x1c] = { | |||
354 | 353 | ||
355 | static const u8 sn_ov7660[0x1c] = { | 354 | static const u8 sn_ov7660[0x1c] = { |
356 | /* reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 */ | 355 | /* reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 */ |
357 | 0x00, 0x61, 0x40, 0x00, 0x1a, 0x20, 0x20, 0x20, | 356 | 0x00, 0x61, 0x40, 0x00, 0x1a, 0x00, 0x00, 0x00, |
358 | /* reg8 reg9 rega regb regc regd rege regf */ | 357 | /* reg8 reg9 rega regb regc regd rege regf */ |
359 | 0x81, 0x21, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, | 358 | 0x81, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
360 | /* reg10 reg11 reg12 reg13 reg14 reg15 reg16 reg17 */ | 359 | /* reg10 reg11 reg12 reg13 reg14 reg15 reg16 reg17 */ |
361 | 0x03, 0x00, 0x01, 0x01, 0x08, 0x28, 0x1e, 0x20, | 360 | 0x03, 0x00, 0x01, 0x01, 0x08, 0x28, 0x1e, 0x20, |
362 | /* reg18 reg19 reg1a reg1b */ | 361 | /* reg18 reg19 reg1a reg1b */ |
@@ -757,6 +756,7 @@ static const u8 ov7660_sensor_init[][8] = { | |||
757 | {0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */ | 756 | {0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */ |
758 | {0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */ | 757 | {0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */ |
759 | {0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */ | 758 | {0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */ |
759 | {0xb1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10}, | ||
760 | /****** (some exchanges in the win trace) ******/ | 760 | /****** (some exchanges in the win trace) ******/ |
761 | {0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */ | 761 | {0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */ |
762 | /* bits[3..0]reserved */ | 762 | /* bits[3..0]reserved */ |
@@ -1065,9 +1065,9 @@ static int configure_gpio(struct gspca_dev *gspca_dev, | |||
1065 | struct sd *sd = (struct sd *) gspca_dev; | 1065 | struct sd *sd = (struct sd *) gspca_dev; |
1066 | const u8 *reg9a; | 1066 | const u8 *reg9a; |
1067 | static const u8 reg9a_def[] = | 1067 | static const u8 reg9a_def[] = |
1068 | {0x08, 0x40, 0x20, 0x10, 0x00, 0x04}; | 1068 | {0x00, 0x40, 0x20, 0x00, 0x00, 0x00}; |
1069 | static const u8 reg9a_sn9c325[] = | 1069 | static const u8 reg9a_spec[] = |
1070 | {0x0a, 0x40, 0x38, 0x30, 0x00, 0x20}; | 1070 | {0x00, 0x40, 0x38, 0x30, 0x00, 0x20}; |
1071 | static const u8 regd4[] = {0x60, 0x00, 0x00}; | 1071 | static const u8 regd4[] = {0x60, 0x00, 0x00}; |
1072 | 1072 | ||
1073 | reg_w1(gspca_dev, 0xf1, 0x00); | 1073 | reg_w1(gspca_dev, 0xf1, 0x00); |
@@ -1077,9 +1077,10 @@ static int configure_gpio(struct gspca_dev *gspca_dev, | |||
1077 | reg_w(gspca_dev, 0x01, &sn9c1xx[1], 2); | 1077 | reg_w(gspca_dev, 0x01, &sn9c1xx[1], 2); |
1078 | reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2); | 1078 | reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2); |
1079 | reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 5); /* jfm len was 3 */ | 1079 | reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 5); /* jfm len was 3 */ |
1080 | switch (sd->bridge) { | 1080 | switch (sd->sensor) { |
1081 | case BRIDGE_SN9C325: | 1081 | case SENSOR_OV7660: |
1082 | reg9a = reg9a_sn9c325; | 1082 | case SENSOR_SP80708: |
1083 | reg9a = reg9a_spec; | ||
1083 | break; | 1084 | break; |
1084 | default: | 1085 | default: |
1085 | reg9a = reg9a_def; | 1086 | reg9a = reg9a_def; |
@@ -1104,7 +1105,6 @@ static int configure_gpio(struct gspca_dev *gspca_dev, | |||
1104 | reg_w1(gspca_dev, 0x17, 0x64); | 1105 | reg_w1(gspca_dev, 0x17, 0x64); |
1105 | reg_w1(gspca_dev, 0x01, 0x42); | 1106 | reg_w1(gspca_dev, 0x01, 0x42); |
1106 | break; | 1107 | break; |
1107 | /*jfm: from win trace */ | ||
1108 | case SENSOR_OV7630: | 1108 | case SENSOR_OV7630: |
1109 | reg_w1(gspca_dev, 0x01, 0x61); | 1109 | reg_w1(gspca_dev, 0x01, 0x61); |
1110 | reg_w1(gspca_dev, 0x17, 0xe2); | 1110 | reg_w1(gspca_dev, 0x17, 0xe2); |
@@ -1114,18 +1114,15 @@ static int configure_gpio(struct gspca_dev *gspca_dev, | |||
1114 | case SENSOR_OV7648: | 1114 | case SENSOR_OV7648: |
1115 | reg_w1(gspca_dev, 0x01, 0x63); | 1115 | reg_w1(gspca_dev, 0x01, 0x63); |
1116 | reg_w1(gspca_dev, 0x17, 0x20); | 1116 | reg_w1(gspca_dev, 0x17, 0x20); |
1117 | reg_w1(gspca_dev, 0x01, 0x62); | ||
1117 | reg_w1(gspca_dev, 0x01, 0x42); | 1118 | reg_w1(gspca_dev, 0x01, 0x42); |
1118 | break; | 1119 | break; |
1119 | /*jfm: from win trace */ | ||
1120 | case SENSOR_OV7660: | 1120 | case SENSOR_OV7660: |
1121 | if (sd->bridge == BRIDGE_SN9C120) { | 1121 | reg_w1(gspca_dev, 0x01, 0x61); |
1122 | reg_w1(gspca_dev, 0x01, 0x61); | 1122 | reg_w1(gspca_dev, 0x17, 0x20); |
1123 | reg_w1(gspca_dev, 0x17, 0x20); | 1123 | reg_w1(gspca_dev, 0x01, 0x60); |
1124 | reg_w1(gspca_dev, 0x01, 0x60); | 1124 | reg_w1(gspca_dev, 0x01, 0x40); |
1125 | reg_w1(gspca_dev, 0x01, 0x40); | 1125 | break; |
1126 | break; | ||
1127 | } | ||
1128 | /* fall thru */ | ||
1129 | case SENSOR_SP80708: | 1126 | case SENSOR_SP80708: |
1130 | reg_w1(gspca_dev, 0x01, 0x63); | 1127 | reg_w1(gspca_dev, 0x01, 0x63); |
1131 | reg_w1(gspca_dev, 0x17, 0x20); | 1128 | reg_w1(gspca_dev, 0x17, 0x20); |
@@ -1134,6 +1131,9 @@ static int configure_gpio(struct gspca_dev *gspca_dev, | |||
1134 | mdelay(100); | 1131 | mdelay(100); |
1135 | reg_w1(gspca_dev, 0x02, 0x62); | 1132 | reg_w1(gspca_dev, 0x02, 0x62); |
1136 | break; | 1133 | break; |
1134 | /* case SENSOR_HV7131R: */ | ||
1135 | /* case SENSOR_MI0360: */ | ||
1136 | /* case SENSOR_MO4000: */ | ||
1137 | default: | 1137 | default: |
1138 | reg_w1(gspca_dev, 0x01, 0x43); | 1138 | reg_w1(gspca_dev, 0x01, 0x43); |
1139 | reg_w1(gspca_dev, 0x17, 0x61); | 1139 | reg_w1(gspca_dev, 0x17, 0x61); |
@@ -1684,13 +1684,9 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
1684 | case SENSOR_OV7648: | 1684 | case SENSOR_OV7648: |
1685 | reg17 = 0x20; | 1685 | reg17 = 0x20; |
1686 | break; | 1686 | break; |
1687 | /*jfm: from win trace */ | ||
1688 | case SENSOR_OV7660: | 1687 | case SENSOR_OV7660: |
1689 | if (sd->bridge == BRIDGE_SN9C120) { | 1688 | reg17 = 0xa0; |
1690 | reg17 = 0xa0; | 1689 | break; |
1691 | break; | ||
1692 | } | ||
1693 | /* fall thru */ | ||
1694 | default: | 1690 | default: |
1695 | reg17 = 0x60; | 1691 | reg17 = 0x60; |
1696 | break; | 1692 | break; |
@@ -1715,16 +1711,17 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
1715 | reg_w1(gspca_dev, 0x9a, 0x0a); | 1711 | reg_w1(gspca_dev, 0x9a, 0x0a); |
1716 | reg_w1(gspca_dev, 0x99, 0x60); | 1712 | reg_w1(gspca_dev, 0x99, 0x60); |
1717 | break; | 1713 | break; |
1714 | case SENSOR_OV7660: | ||
1715 | reg_w1(gspca_dev, 0x9a, 0x05); | ||
1716 | if (sd->bridge == BRIDGE_SN9C105) | ||
1717 | reg_w1(gspca_dev, 0x99, 0xff); | ||
1718 | else | ||
1719 | reg_w1(gspca_dev, 0x99, 0x5b); | ||
1720 | break; | ||
1718 | case SENSOR_SP80708: | 1721 | case SENSOR_SP80708: |
1719 | reg_w1(gspca_dev, 0x9a, 0x05); | 1722 | reg_w1(gspca_dev, 0x9a, 0x05); |
1720 | reg_w1(gspca_dev, 0x99, 0x59); | 1723 | reg_w1(gspca_dev, 0x99, 0x59); |
1721 | break; | 1724 | break; |
1722 | case SENSOR_OV7660: | ||
1723 | if (sd->bridge == BRIDGE_SN9C120) { | ||
1724 | reg_w1(gspca_dev, 0x9a, 0x05); | ||
1725 | break; | ||
1726 | } | ||
1727 | /* fall thru */ | ||
1728 | default: | 1725 | default: |
1729 | reg_w1(gspca_dev, 0x9a, 0x08); | 1726 | reg_w1(gspca_dev, 0x9a, 0x08); |
1730 | reg_w1(gspca_dev, 0x99, 0x59); | 1727 | reg_w1(gspca_dev, 0x99, 0x59); |