diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-core.c | 41 | ||||
-rw-r--r-- | drivers/media/video/em28xx/em28xx-dvb.c | 5 |
2 files changed, 34 insertions, 12 deletions
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c index 01b89100ebd3..57b1b5c6d885 100644 --- a/drivers/media/video/em28xx/em28xx-core.c +++ b/drivers/media/video/em28xx/em28xx-core.c | |||
@@ -1113,17 +1113,19 @@ EXPORT_SYMBOL_GPL(em28xx_init_isoc); | |||
1113 | int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev) | 1113 | int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev) |
1114 | { | 1114 | { |
1115 | unsigned int chip_cfg2; | 1115 | unsigned int chip_cfg2; |
1116 | unsigned int packet_size = 564; | 1116 | unsigned int packet_size; |
1117 | 1117 | ||
1118 | if (dev->chip_id == CHIP_ID_EM2874 || dev->chip_id == CHIP_ID_EM2884) { | 1118 | switch (dev->chip_id) { |
1119 | /* FIXME - for now assume 564 like it was before, but the | 1119 | case CHIP_ID_EM2710: |
1120 | em2874 code should be added to return the proper value... */ | 1120 | case CHIP_ID_EM2750: |
1121 | packet_size = 564; | 1121 | case CHIP_ID_EM2800: |
1122 | } else if (dev->chip_id == CHIP_ID_EM28174) { | 1122 | case CHIP_ID_EM2820: |
1123 | /* FIXME same as em2874. 564 was enough for 22 Mbit DVB-T | 1123 | case CHIP_ID_EM2840: |
1124 | but too much for 44 Mbit DVB-C. */ | 1124 | case CHIP_ID_EM2860: |
1125 | packet_size = 752; | 1125 | /* No DVB support */ |
1126 | } else { | 1126 | return -EINVAL; |
1127 | case CHIP_ID_EM2870: | ||
1128 | case CHIP_ID_EM2883: | ||
1127 | /* TS max packet size stored in bits 1-0 of R01 */ | 1129 | /* TS max packet size stored in bits 1-0 of R01 */ |
1128 | chip_cfg2 = em28xx_read_reg(dev, EM28XX_R01_CHIPCFG2); | 1130 | chip_cfg2 = em28xx_read_reg(dev, EM28XX_R01_CHIPCFG2); |
1129 | switch (chip_cfg2 & EM28XX_CHIPCFG2_TS_PACKETSIZE_MASK) { | 1131 | switch (chip_cfg2 & EM28XX_CHIPCFG2_TS_PACKETSIZE_MASK) { |
@@ -1140,9 +1142,24 @@ int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev) | |||
1140 | packet_size = 752; | 1142 | packet_size = 752; |
1141 | break; | 1143 | break; |
1142 | } | 1144 | } |
1145 | break; | ||
1146 | case CHIP_ID_EM2874: | ||
1147 | /* | ||
1148 | * FIXME: for now assumes 564 like it was before, but the | ||
1149 | * em2874 code should be added to return the proper value | ||
1150 | */ | ||
1151 | packet_size = 564; | ||
1152 | break; | ||
1153 | case CHIP_ID_EM2884: | ||
1154 | case CHIP_ID_EM28174: | ||
1155 | default: | ||
1156 | /* | ||
1157 | * FIXME: same as em2874. 564 was enough for 22 Mbit DVB-T | ||
1158 | * but not enough for 44 Mbit DVB-C. | ||
1159 | */ | ||
1160 | packet_size = 752; | ||
1143 | } | 1161 | } |
1144 | 1162 | ||
1145 | em28xx_coredbg("dvb max packet size=%d\n", packet_size); | ||
1146 | return packet_size; | 1163 | return packet_size; |
1147 | } | 1164 | } |
1148 | EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize); | 1165 | EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize); |
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c index ab8a740bc68c..e5916dee4094 100644 --- a/drivers/media/video/em28xx/em28xx-dvb.c +++ b/drivers/media/video/em28xx/em28xx-dvb.c | |||
@@ -167,6 +167,11 @@ static int start_streaming(struct em28xx_dvb *dvb) | |||
167 | return rc; | 167 | return rc; |
168 | 168 | ||
169 | max_dvb_packet_size = em28xx_isoc_dvb_max_packetsize(dev); | 169 | max_dvb_packet_size = em28xx_isoc_dvb_max_packetsize(dev); |
170 | if (max_dvb_packet_size < 0) | ||
171 | return max_dvb_packet_size; | ||
172 | dprintk(1, "Using %d buffers each with %d bytes\n", | ||
173 | EM28XX_DVB_NUM_BUFS, | ||
174 | max_dvb_packet_size); | ||
170 | 175 | ||
171 | return em28xx_init_isoc(dev, EM28XX_DVB_MAX_PACKETS, | 176 | return em28xx_init_isoc(dev, EM28XX_DVB_MAX_PACKETS, |
172 | EM28XX_DVB_NUM_BUFS, max_dvb_packet_size, | 177 | EM28XX_DVB_NUM_BUFS, max_dvb_packet_size, |