Lines Matching defs:av7110

20 #include "av7110.h"
75 static int write_ts_to_decoder(struct av7110 *av7110, int type, const u8 *buf, size_t len);
102 int av7110_av_start_record(struct av7110 *av7110, int av,
108 dprintk(2, "av7110:%p, , dvb_demux_feed:%p\n", av7110, dvbdmxfeed);
110 if (av7110->playing || (av7110->rec_mode & av))
112 av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Stop, 0);
114 av7110->rec_mode |= av;
116 switch (av7110->rec_mode) {
118 dvb_filter_pes2ts_init(&av7110->p2t[0],
122 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0);
126 dvb_filter_pes2ts_init(&av7110->p2t[1],
130 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0);
134 dvb_filter_pes2ts_init(&av7110->p2t[0],
138 dvb_filter_pes2ts_init(&av7110->p2t[1],
142 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Record, 2, AV_PES, 0);
148 int av7110_av_start_play(struct av7110 *av7110, int av)
151 dprintk(2, "av7110:%p, \n", av7110);
153 if (av7110->rec_mode)
155 if (av7110->playing & av)
158 av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Stop, 0);
160 if (av7110->playing == RP_NONE) {
161 av7110_ipack_reset(&av7110->ipack[0]);
162 av7110_ipack_reset(&av7110->ipack[1]);
165 av7110->playing |= av;
166 switch (av7110->playing) {
168 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0);
171 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0);
172 av7110->sinfo = 0;
175 av7110->sinfo = 0;
176 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Play, 2, AV_PES, 0);
182 int av7110_av_stop(struct av7110 *av7110, int av)
185 dprintk(2, "av7110:%p, \n", av7110);
187 if (!(av7110->playing & av) && !(av7110->rec_mode & av))
189 av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Stop, 0);
190 if (av7110->playing) {
191 av7110->playing &= ~av;
192 switch (av7110->playing) {
194 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0);
197 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0);
200 ret = av7110_set_vidmode(av7110, av7110->vidmode);
204 av7110->rec_mode &= ~av;
205 switch (av7110->rec_mode) {
207 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0);
210 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0);
266 int av7110_set_volume(struct av7110 *av7110, unsigned int volleft,
272 dprintk(2, "av7110:%p, \n", av7110);
274 av7110->mixer.volume_left = volleft;
275 av7110->mixer.volume_right = volright;
277 switch (av7110->adac_type) {
285 if ((err = SendDAC(av7110, 3, 0x80 + volleft)))
287 return SendDAC(av7110, 4, volright);
292 i2c_writereg(av7110, 0x20, 0x03, volleft);
293 i2c_writereg(av7110, 0x20, 0x04, volright);
301 msp_writereg(av7110, MSP_WR_DSP, 0x0001, balance << 8);
302 msp_writereg(av7110, MSP_WR_DSP, 0x0000, val); /* loudspeaker */
303 msp_writereg(av7110, MSP_WR_DSP, 0x0006, val); /* headphonesr */
311 msp_writereg(av7110, MSP_WR_DSP, 0x0001, balance << 8);
312 msp_writereg(av7110, MSP_WR_DSP, 0x0000, val); /* loudspeaker */
319 int av7110_set_vidmode(struct av7110 *av7110, enum av7110_video_mode mode)
322 dprintk(2, "av7110:%p, \n", av7110);
324 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, LoadVidCode, 1, mode);
326 if (!ret && !av7110->playing) {
327 ret = ChangePIDs(av7110, av7110->pids[DMX_PES_VIDEO],
328 av7110->pids[DMX_PES_AUDIO],
329 av7110->pids[DMX_PES_TELETEXT],
330 0, av7110->pids[DMX_PES_PCR]);
332 ret = av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0);
349 static int get_video_format(struct av7110 *av7110, u8 *buf, int count)
357 dprintk(2, "av7110:%p, \n", av7110);
359 if (av7110->sinfo)
369 ret = av7110_set_vidmode(av7110, sw2mode[sw]);
372 av7110->sinfo = 1;
409 struct av7110 *av7110 = (struct av7110 *) priv;
410 dprintk(2, "av7110:%p, \n", av7110);
413 get_video_format(av7110, buf, count);
414 aux_ring_buffer_write(&av7110->avout, buf, count);
416 aux_ring_buffer_write(&av7110->aout, buf, count);
421 struct av7110 *av7110 = (struct av7110 *) priv;
422 dprintk(2, "av7110:%p, \n", av7110);
424 aux_ring_buffer_write(&av7110->aout, buf, count);
430 static ssize_t ts_play(struct av7110 *av7110, const char __user *buf,
439 rb = (type) ? &av7110->avout : &av7110->aout;
440 kb = av7110->kbuf[type];
457 write_ts_to_decoder(av7110, type, kb, TS_SIZE);
466 #define FREE_COND (dvb_ringbuffer_free(&av7110->avout) >= 20 * 1024 && \
467 dvb_ringbuffer_free(&av7110->aout) >= 20 * 1024)
469 static ssize_t dvb_play(struct av7110 *av7110, const char __user *buf,
473 dprintk(2, "av7110:%p, \n", av7110);
475 if (!av7110->kbuf[type])
485 if (wait_event_interruptible(av7110->avout.queue,
492 if (copy_from_user(av7110->kbuf[type], buf, n))
494 av7110_ipack_instant_repack(av7110->kbuf[type], n,
495 &av7110->ipack[type]);
502 static ssize_t dvb_play_kernel(struct av7110 *av7110, const u8 *buf,
506 dprintk(2, "av7110:%p, \n", av7110);
508 if (!av7110->kbuf[type])
518 if (wait_event_interruptible(av7110->avout.queue,
525 av7110_ipack_instant_repack(buf, n, &av7110->ipack[type]);
532 static ssize_t dvb_aplay(struct av7110 *av7110, const char __user *buf,
536 dprintk(2, "av7110:%p, \n", av7110);
538 if (!av7110->kbuf[type])
540 if (nonblock && dvb_ringbuffer_free(&av7110->aout) < 20 * 1024)
544 if (dvb_ringbuffer_free(&av7110->aout) < 20 * 1024) {
547 if (wait_event_interruptible(av7110->aout.queue,
548 (dvb_ringbuffer_free(&av7110->aout) >= 20 * 1024)))
554 if (copy_from_user(av7110->kbuf[type], buf, n))
556 av7110_ipack_instant_repack(av7110->kbuf[type], n,
557 &av7110->ipack[type]);
809 static int write_ts_to_decoder(struct av7110 *av7110, int type, const u8 *buf, size_t len)
811 struct ipack *ipack = &av7110->ipack[type];
839 struct av7110 *av7110 = (struct av7110 *) demux->priv;
841 dprintk(2, "av7110:%p, \n", av7110);
843 if (av7110->full_ts && demux->dmx.frontend->source != DMX_MEMORY_FE)
848 if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
852 if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY)
859 return write_ts_to_decoder(av7110, feed->pes_type, buf, len);
867 void dvb_video_add_event(struct av7110 *av7110, struct video_event *event)
869 struct dvb_video_events *events = &av7110->video_events;
890 static int dvb_video_get_event (struct av7110 *av7110, struct video_event *event, int flags)
892 struct dvb_video_events *events = &av7110->video_events;
928 struct av7110 *av7110 = dvbdev->priv;
931 dprintk(2, "av7110:%p, \n", av7110);
934 poll_wait(file, &av7110->avout.queue, wait);
936 poll_wait(file, &av7110->video_events.wait_queue, wait);
938 if (av7110->video_events.eventw != av7110->video_events.eventr)
942 if (av7110->playing) {
958 struct av7110 *av7110 = dvbdev->priv;
961 dprintk(2, "av7110:%p, \n", av7110);
966 if (av7110->videostate.stream_source != VIDEO_SOURCE_MEMORY)
972 return ts_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 1);
974 return dvb_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 1);
980 struct av7110 *av7110 = dvbdev->priv;
983 dprintk(2, "av7110:%p, \n", av7110);
985 poll_wait(file, &av7110->aout.queue, wait);
987 if (av7110->playing) {
988 if (dvb_ringbuffer_free(&av7110->aout) >= 20 * 1024)
1000 struct av7110 *av7110 = dvbdev->priv;
1003 dprintk(2, "av7110:%p, \n", av7110);
1005 if (av7110->audiostate.stream_source != AUDIO_SOURCE_MEMORY) {
1013 return ts_play(av7110, buf, count, file->f_flags & O_NONBLOCK, 0);
1015 return dvb_aplay(av7110, buf, count, file->f_flags & O_NONBLOCK, 0);
1022 static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len, int nonblock)
1028 dprintk(2, "av7110:%p, \n", av7110);
1033 if (!(av7110->playing & RP_VIDEO)) {
1034 if (av7110_av_start_play(av7110, RP_VIDEO) < 0)
1070 dvb_play_kernel(av7110, iframe_header, sizeof(iframe_header), 0, 1);
1073 dvb_play(av7110, buf, len, 0, 1);
1075 av7110_ipack_flush(&av7110->ipack[1]);
1078 return vidcom(av7110, AV_VIDEO_CMD_FREEZE, 1);
1102 static int dvb_compat_video_get_event(struct av7110 *av7110,
1108 ret = dvb_video_get_event(av7110, &ev, flags);
1124 struct av7110 *av7110 = dvbdev->priv;
1128 dprintk(1, "av7110:%p, cmd=%04x\n", av7110,cmd);
1137 if (mutex_lock_interruptible(&av7110->ioctl_mutex))
1142 av7110->videostate.play_state = VIDEO_STOPPED;
1143 if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY)
1144 ret = av7110_av_stop(av7110, RP_VIDEO);
1146 ret = vidcom(av7110, AV_VIDEO_CMD_STOP,
1147 av7110->videostate.video_blank ? 0 : 1);
1149 av7110->trickmode = TRICK_NONE;
1153 av7110->trickmode = TRICK_NONE;
1154 if (av7110->videostate.play_state == VIDEO_FREEZED) {
1155 av7110->videostate.play_state = VIDEO_PLAYING;
1156 ret = vidcom(av7110, AV_VIDEO_CMD_PLAY, 0);
1160 if (av7110->videostate.stream_source == VIDEO_SOURCE_MEMORY) {
1161 if (av7110->playing == RP_AV) {
1162 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Stop, 0);
1165 av7110->playing &= ~RP_VIDEO;
1167 ret = av7110_av_start_play(av7110, RP_VIDEO);
1170 ret = vidcom(av7110, AV_VIDEO_CMD_PLAY, 0);
1172 av7110->videostate.play_state = VIDEO_PLAYING;
1176 av7110->videostate.play_state = VIDEO_FREEZED;
1177 if (av7110->playing & RP_VIDEO)
1178 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Pause, 0);
1180 ret = vidcom(av7110, AV_VIDEO_CMD_FREEZE, 1);
1182 av7110->trickmode = TRICK_FREEZE;
1186 if (av7110->playing & RP_VIDEO)
1187 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Continue, 0);
1189 ret = vidcom(av7110, AV_VIDEO_CMD_PLAY, 0);
1191 av7110->videostate.play_state = VIDEO_PLAYING;
1192 av7110->trickmode = TRICK_NONE;
1197 av7110->videostate.stream_source = (video_stream_source_t) arg;
1201 av7110->videostate.video_blank = (int) arg;
1205 memcpy(parg, &av7110->videostate, sizeof(struct video_status));
1210 ret = dvb_compat_video_get_event(av7110, parg, file->f_flags);
1215 ret = dvb_video_get_event(av7110, parg, file->f_flags);
1219 memcpy(parg, &av7110->video_size, sizeof(video_size_t));
1227 av7110->display_panscan = VID_PAN_SCAN_PREF;
1230 av7110->display_panscan = VID_VC_AND_PS_PREF;
1233 av7110->display_panscan = VID_CENTRE_CUT_PREF;
1240 av7110->videostate.display_format = format;
1241 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetPanScanType,
1242 1, av7110->display_panscan);
1251 av7110->display_ar = arg;
1252 ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetMonitorType,
1261 av7110->videostate.stream_source = VIDEO_SOURCE_MEMORY;
1262 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
1263 ret = play_iframe(av7110, compat_ptr(pic->iFrame),
1273 av7110->videostate.stream_source = VIDEO_SOURCE_MEMORY;
1274 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
1275 ret = play_iframe(av7110, pic->iFrame, pic->size,
1282 if (av7110->playing & RP_VIDEO)
1283 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY,
1286 ret = vidcom(av7110, AV_VIDEO_CMD_FFWD, arg);
1288 av7110->trickmode = TRICK_FAST;
1289 av7110->videostate.play_state = VIDEO_PLAYING;
1294 if (av7110->playing&RP_VIDEO) {
1295 if (av7110->trickmode != TRICK_SLOW)
1296 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0);
1298 ret = vidcom(av7110, AV_VIDEO_CMD_SLOW, arg);
1300 ret = vidcom(av7110, AV_VIDEO_CMD_PLAY, 0);
1302 ret = vidcom(av7110, AV_VIDEO_CMD_STOP, 0);
1304 ret = vidcom(av7110, AV_VIDEO_CMD_SLOW, arg);
1307 av7110->trickmode = TRICK_SLOW;
1308 av7110->videostate.play_state = VIDEO_PLAYING;
1318 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
1319 av7110_ipack_reset(&av7110->ipack[1]);
1320 if (av7110->playing == RP_AV) {
1321 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY,
1325 if (av7110->trickmode == TRICK_FAST)
1326 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY,
1328 if (av7110->trickmode == TRICK_SLOW) {
1329 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY,
1332 ret = vidcom(av7110, AV_VIDEO_CMD_SLOW, arg);
1334 if (av7110->trickmode == TRICK_FREEZE)
1335 ret = vidcom(av7110, AV_VIDEO_CMD_STOP, 1);
1347 mutex_unlock(&av7110->ioctl_mutex);
1355 struct av7110 *av7110 = dvbdev->priv;
1359 dprintk(1, "av7110:%p, cmd=%04x\n", av7110,cmd);
1365 if (mutex_lock_interruptible(&av7110->ioctl_mutex))
1370 if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
1371 ret = av7110_av_stop(av7110, RP_AUDIO);
1373 ret = audcom(av7110, AUDIO_CMD_MUTE);
1375 av7110->audiostate.play_state = AUDIO_STOPPED;
1379 if (av7110->audiostate.stream_source == AUDIO_SOURCE_MEMORY)
1380 ret = av7110_av_start_play(av7110, RP_AUDIO);
1382 ret = audcom(av7110, AUDIO_CMD_UNMUTE);
1384 av7110->audiostate.play_state = AUDIO_PLAYING;
1388 ret = audcom(av7110, AUDIO_CMD_MUTE);
1390 av7110->audiostate.play_state = AUDIO_PAUSED;
1394 if (av7110->audiostate.play_state == AUDIO_PAUSED) {
1395 av7110->audiostate.play_state = AUDIO_PLAYING;
1396 ret = audcom(av7110, AUDIO_CMD_UNMUTE | AUDIO_CMD_PCM16);
1401 av7110->audiostate.stream_source = (audio_stream_source_t) arg;
1406 ret = audcom(av7110, arg ? AUDIO_CMD_MUTE : AUDIO_CMD_UNMUTE);
1408 av7110->audiostate.mute_state = (int) arg;
1413 av7110->audiostate.AV_sync_state = (int) arg;
1414 ret = audcom(av7110, arg ? AUDIO_CMD_SYNC_ON : AUDIO_CMD_SYNC_OFF);
1418 if (FW_VERSION(av7110->arm_app) < 0x2621)
1420 av7110->audiostate.bypass_mode = (int)arg;
1424 av7110->audiostate.channel_select = (audio_channel_select_t) arg;
1425 switch(av7110->audiostate.channel_select) {
1427 ret = audcom(av7110, AUDIO_CMD_STEREO);
1429 if (av7110->adac_type == DVB_ADAC_CRYSTAL)
1430 i2c_writereg(av7110, 0x20, 0x02, 0x49);
1431 else if (av7110->adac_type == DVB_ADAC_MSP34x5)
1432 msp_writereg(av7110, MSP_WR_DSP, 0x0008, 0x0220);
1436 ret = audcom(av7110, AUDIO_CMD_MONO_L);
1438 if (av7110->adac_type == DVB_ADAC_CRYSTAL)
1439 i2c_writereg(av7110, 0x20, 0x02, 0x4a);
1440 else if (av7110->adac_type == DVB_ADAC_MSP34x5)
1441 msp_writereg(av7110, MSP_WR_DSP, 0x0008, 0x0200);
1445 ret = audcom(av7110, AUDIO_CMD_MONO_R);
1447 if (av7110->adac_type == DVB_ADAC_CRYSTAL)
1448 i2c_writereg(av7110, 0x20, 0x02, 0x45);
1449 else if (av7110->adac_type == DVB_ADAC_MSP34x5)
1450 msp_writereg(av7110, MSP_WR_DSP, 0x0008, 0x0210);
1460 memcpy(parg, &av7110->audiostate, sizeof(struct audio_status));
1464 if (FW_VERSION(av7110->arm_app) < 0x2621)
1472 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
1473 av7110_ipack_reset(&av7110->ipack[0]);
1474 if (av7110->playing == RP_AV)
1475 ret = av7110_fw_cmd(av7110, COMTYPE_REC_PLAY,
1485 ret = av7110_set_volume(av7110, amix->volume_left, amix->volume_right);
1496 mutex_unlock(&av7110->ioctl_mutex);
1504 struct av7110 *av7110 = dvbdev->priv;
1507 dprintk(2, "av7110:%p, \n", av7110);
1513 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
1514 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout);
1515 av7110->video_blank = 1;
1516 av7110->audiostate.AV_sync_state = 1;
1517 av7110->videostate.stream_source = VIDEO_SOURCE_DEMUX;
1520 av7110->video_events.eventr = av7110->video_events.eventw = 0;
1529 struct av7110 *av7110 = dvbdev->priv;
1531 dprintk(2, "av7110:%p, \n", av7110);
1534 av7110_av_stop(av7110, RP_VIDEO);
1543 struct av7110 *av7110 = dvbdev->priv;
1546 dprintk(2, "av7110:%p, \n", av7110);
1550 dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout);
1551 av7110->audiostate.stream_source = AUDIO_SOURCE_DEMUX;
1558 struct av7110 *av7110 = dvbdev->priv;
1560 dprintk(2, "av7110:%p, \n", av7110);
1562 av7110_av_stop(av7110, RP_AUDIO);
1612 int av7110_av_register(struct av7110 *av7110)
1614 av7110->audiostate.AV_sync_state = 0;
1615 av7110->audiostate.mute_state = 0;
1616 av7110->audiostate.play_state = AUDIO_STOPPED;
1617 av7110->audiostate.stream_source = AUDIO_SOURCE_DEMUX;
1618 av7110->audiostate.channel_select = AUDIO_STEREO;
1619 av7110->audiostate.bypass_mode = 0;
1621 av7110->videostate.video_blank = 0;
1622 av7110->videostate.play_state = VIDEO_STOPPED;
1623 av7110->videostate.stream_source = VIDEO_SOURCE_DEMUX;
1624 av7110->videostate.video_format = VIDEO_FORMAT_4_3;
1625 av7110->videostate.display_format = VIDEO_LETTER_BOX;
1626 av7110->display_ar = VIDEO_FORMAT_4_3;
1627 av7110->display_panscan = VID_VC_AND_PS_PREF;
1629 init_waitqueue_head(&av7110->video_events.wait_queue);
1630 spin_lock_init(&av7110->video_events.lock);
1631 av7110->video_events.eventw = av7110->video_events.eventr = 0;
1632 av7110->video_events.overflow = 0;
1633 memset(&av7110->video_size, 0, sizeof (video_size_t));
1635 dvb_register_device(&av7110->dvb_adapter, &av7110->video_dev,
1636 &dvbdev_video, av7110, DVB_DEVICE_VIDEO, 0);
1638 dvb_register_device(&av7110->dvb_adapter, &av7110->audio_dev,
1639 &dvbdev_audio, av7110, DVB_DEVICE_AUDIO, 0);
1644 void av7110_av_unregister(struct av7110 *av7110)
1646 dvb_unregister_device(av7110->audio_dev);
1647 dvb_unregister_device(av7110->video_dev);
1650 int av7110_av_init(struct av7110 *av7110)
1656 struct ipack *ipack = av7110->ipack + i;
1664 ipack->data = av7110;
1667 dvb_ringbuffer_init(&av7110->avout, av7110->iobuf, AVOUTLEN);
1668 dvb_ringbuffer_init(&av7110->aout, av7110->iobuf + AVOUTLEN, AOUTLEN);
1670 av7110->kbuf[0] = (u8 *)(av7110->iobuf + AVOUTLEN + AOUTLEN + BMPLEN);
1671 av7110->kbuf[1] = av7110->kbuf[0] + 2 * IPACKS;
1676 void av7110_av_exit(struct av7110 *av7110)
1678 av7110_ipack_free(&av7110->ipack[0]);
1679 av7110_ipack_free(&av7110->ipack[1]);