aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/em28xx/em28xx-core.c41
-rw-r--r--drivers/media/video/em28xx/em28xx-dvb.c5
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);
1113int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev) 1113int 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}
1148EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize); 1165EXPORT_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,