• Home
  • Raw
  • Download

Lines Matching +full:inter +full:- +full:data

2  * altera-ci.c
4 * CI driver in conjunction with NetUp Dual DVB-T/C RF CI card
23 * GPIO-0 ~INT in
24 * GPIO-1 TMS out
25 * GPIO-2 ~reset chips out
26 * GPIO-3 to GPIO-10 data/addr for CA in/out
27 * GPIO-11 ~CS out
28 * GPIO-12 AD_RG out
29 * GPIO-13 ~WR out
30 * GPIO-14 ~RD out
31 * GPIO-15 ~RDY in
32 * GPIO-16 TCK out
33 * GPIO-17 TDO in
34 * GPIO-18 TDI out
38 * bits 31-16
39 * +-----------+
41 * +-----------+
43 * +-------+-------+-------+-------+-------+-------+-------+-------+
45 * +-------+-------+-------+-------+-------+-------+-------+-------+
47 * +-------+-------+-------+-------+-------+-------+-------+-------+
49 * +-------+-------+-------+-------+-------+-------+-------+-------+
56 #include "altera-ci.h"
113 int (*fpga_rw) (void *dev, int flag, int data, int rw);
161 (temp_chip->internal->dev != dev)) in find_inode()
162 temp_chip = temp_chip->next_inode; in find_inode()
173 if ((temp_int->pid_filt[filt_nr]) == NULL) in check_filter()
176 if (temp_int->pid_filt[filt_nr]->demux == demux_dev) in check_filter()
193 if (temp_chip->internal != NULL) { in find_dinode()
194 temp_int = temp_chip->internal; in find_dinode()
201 temp_chip = temp_chip->next_inode; in find_dinode()
211 struct fpga_inode *del_node = find_inode(internal->dev); in remove_inode()
215 fpga_first_inode = del_node->next_inode; in remove_inode()
217 while (prev_node->next_inode != del_node) in remove_inode()
218 prev_node = prev_node->next_inode; in remove_inode()
220 if (del_node->next_inode == NULL) in remove_inode()
221 prev_node->next_inode = NULL; in remove_inode()
223 prev_node->next_inode = in remove_inode()
224 prev_node->next_inode->next_inode; in remove_inode()
240 while (new_node->next_inode != NULL) in append_internal()
241 new_node = new_node->next_inode; in append_internal()
243 new_node->next_inode = in append_internal()
245 if (new_node->next_inode != NULL) in append_internal()
246 new_node = new_node->next_inode; in append_internal()
252 new_node->internal = internal; in append_internal()
253 new_node->next_inode = NULL; in append_internal()
259 static int netup_fpga_op_rw(struct fpga_internal *inter, int addr, in netup_fpga_op_rw() argument
262 inter->fpga_rw(inter->dev, NETUP_CI_FLG_AD, addr, 0); in netup_fpga_op_rw()
263 return inter->fpga_rw(inter->dev, 0, val, read); in netup_fpga_op_rw()
266 /* flag - mem/io, read - read/write */
271 struct altera_ci_state *state = en50221->data; in altera_ci_op_cam()
272 struct fpga_internal *inter = state->internal; in altera_ci_op_cam() local
278 return -EINVAL; in altera_ci_op_cam()
280 mutex_lock(&inter->fpga_mutex); in altera_ci_op_cam()
282 netup_fpga_op_rw(inter, NETUP_CI_ADDR0, ((addr << 1) & 0xfe), 0); in altera_ci_op_cam()
283 netup_fpga_op_rw(inter, NETUP_CI_ADDR1, ((addr >> 7) & 0x7f), 0); in altera_ci_op_cam()
284 store = netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, 0, NETUP_CI_FLG_RD); in altera_ci_op_cam()
287 store |= ((state->nr << 7) | (flag << 6)); in altera_ci_op_cam()
289 netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, store, 0); in altera_ci_op_cam()
290 mem = netup_fpga_op_rw(inter, NETUP_CI_DATA, val, read); in altera_ci_op_cam()
292 mutex_unlock(&inter->fpga_mutex); in altera_ci_op_cam()
309 int slot, int addr, u8 data) in altera_ci_write_attribute_mem() argument
311 return altera_ci_op_cam(en50221, slot, 0, 0, addr, data); in altera_ci_write_attribute_mem()
322 u8 addr, u8 data) in altera_ci_write_cam_ctl() argument
324 return altera_ci_op_cam(en50221, slot, NETUP_CI_FLG_CTL, 0, addr, data); in altera_ci_write_cam_ctl()
329 struct altera_ci_state *state = en50221->data; in altera_ci_slot_reset()
330 struct fpga_internal *inter = state->internal; in altera_ci_slot_reset() local
338 return -EINVAL; in altera_ci_slot_reset()
340 mutex_lock(&inter->fpga_mutex); in altera_ci_slot_reset()
342 ret = netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, 0, NETUP_CI_FLG_RD); in altera_ci_slot_reset()
343 netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, in altera_ci_slot_reset()
344 (ret & 0xcf) | (1 << (5 - state->nr)), 0); in altera_ci_slot_reset()
346 mutex_unlock(&inter->fpga_mutex); in altera_ci_slot_reset()
351 mutex_lock(&inter->fpga_mutex); in altera_ci_slot_reset()
353 ret = netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, in altera_ci_slot_reset()
355 mutex_unlock(&inter->fpga_mutex); in altera_ci_slot_reset()
357 if ((ret & (1 << (5 - state->nr))) == 0) in altera_ci_slot_reset()
365 jiffies_to_msecs(jiffies + msecs_to_jiffies(9999) - t_out)); in altera_ci_slot_reset()
378 struct altera_ci_state *state = en50221->data; in altera_ci_slot_ts_ctl()
379 struct fpga_internal *inter = state->internal; in altera_ci_slot_ts_ctl() local
385 return -EINVAL; in altera_ci_slot_ts_ctl()
387 mutex_lock(&inter->fpga_mutex); in altera_ci_slot_ts_ctl()
389 ret = netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, 0, NETUP_CI_FLG_RD); in altera_ci_slot_ts_ctl()
390 netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, in altera_ci_slot_ts_ctl()
391 (ret & 0x0f) | (1 << (3 - state->nr)), 0); in altera_ci_slot_ts_ctl()
393 mutex_unlock(&inter->fpga_mutex); in altera_ci_slot_ts_ctl()
401 struct fpga_internal *inter = in netup_read_ci_status() local
407 mutex_lock(&inter->fpga_mutex); in netup_read_ci_status()
409 ret = netup_fpga_op_rw(inter, NETUP_CI_INT_CTRL, 0, NETUP_CI_FLG_RD); in netup_read_ci_status()
410 ret = netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL, 0, NETUP_CI_FLG_RD); in netup_read_ci_status()
412 mutex_unlock(&inter->fpga_mutex); in netup_read_ci_status()
414 if (inter->state[1] != NULL) { in netup_read_ci_status()
415 inter->state[1]->status = in netup_read_ci_status()
420 __func__, inter->state[1]->status); in netup_read_ci_status()
423 if (inter->state[0] != NULL) { in netup_read_ci_status()
424 inter->state[0]->status = in netup_read_ci_status()
429 __func__, inter->state[0]->status); in netup_read_ci_status()
437 struct fpga_internal *inter = NULL; in altera_ci_irq() local
444 inter = temp_int->internal; in altera_ci_irq()
445 schedule_work(&inter->work); in altera_ci_irq()
456 struct altera_ci_state *state = en50221->data; in altera_poll_ci_slot_status()
459 return -EINVAL; in altera_poll_ci_slot_status()
461 return state->status; in altera_poll_ci_slot_status()
472 pid_filt = temp_int->internal->pid_filt[filt_nr - 1]; in altera_hw_filt_release()
474 pid_filt->demux->start_feed = pid_filt->start_feed; in altera_hw_filt_release()
475 pid_filt->demux->stop_feed = pid_filt->stop_feed; in altera_hw_filt_release()
477 if (((--(temp_int->internal->filts_used)) <= 0) && in altera_hw_filt_release()
478 ((temp_int->internal->cis_used) <= 0)) { in altera_hw_filt_release()
482 remove_inode(temp_int->internal); in altera_hw_filt_release()
483 kfree(pid_filt->internal); in altera_hw_filt_release()
500 state = temp_int->internal->state[ci_nr - 1]; in altera_ci_release()
504 if (((temp_int->internal->filts_used) <= 0) && in altera_ci_release()
505 ((--(temp_int->internal->cis_used)) <= 0)) { in altera_ci_release()
509 remove_inode(temp_int->internal); in altera_ci_release()
510 kfree(state->internal); in altera_ci_release()
514 if (state->ca.data != NULL) in altera_ci_release()
515 dvb_ca_en50221_release(&state->ca); in altera_ci_release()
527 struct fpga_internal *inter = pid_filt->internal; in altera_pid_control() local
530 /* pid 0-0x1f always enabled, don't touch them */ in altera_pid_control()
534 mutex_lock(&inter->fpga_mutex); in altera_pid_control()
536 netup_fpga_op_rw(inter, NETUP_CI_PID_ADDR0, (pid >> 3) & 0xff, 0); in altera_pid_control()
537 netup_fpga_op_rw(inter, NETUP_CI_PID_ADDR1, in altera_pid_control()
538 ((pid >> 11) & 0x03) | (pid_filt->nr << 2), 0); in altera_pid_control()
540 store = netup_fpga_op_rw(inter, NETUP_CI_PID_DATA, 0, NETUP_CI_FLG_RD); in altera_pid_control()
542 if (onoff)/* 0 - on, 1 - off */ in altera_pid_control()
547 netup_fpga_op_rw(inter, NETUP_CI_PID_DATA, store, 0); in altera_pid_control()
549 mutex_unlock(&inter->fpga_mutex); in altera_pid_control()
552 pid_filt->nr, pid, pid, onoff ? "off" : "on"); in altera_pid_control()
558 struct fpga_internal *inter = pid_filt->internal; in altera_toggle_fullts_streaming() local
562 pid_dbg_print("%s: pid_filt->nr[%d] now %s\n", __func__, pid_filt->nr, in altera_toggle_fullts_streaming()
565 if (onoff)/* 0 - on, 1 - off */ in altera_toggle_fullts_streaming()
570 mutex_lock(&inter->fpga_mutex); in altera_toggle_fullts_streaming()
573 netup_fpga_op_rw(inter, NETUP_CI_PID_ADDR0, i & 0xff, 0); in altera_toggle_fullts_streaming()
575 netup_fpga_op_rw(inter, NETUP_CI_PID_ADDR1, in altera_toggle_fullts_streaming()
576 ((i >> 8) & 0x03) | (pid_filt->nr << 2), 0); in altera_toggle_fullts_streaming()
577 /* pid 0-0x1f always enabled */ in altera_toggle_fullts_streaming()
578 netup_fpga_op_rw(inter, NETUP_CI_PID_DATA, in altera_toggle_fullts_streaming()
582 mutex_unlock(&inter->fpga_mutex); in altera_toggle_fullts_streaming()
589 struct fpga_internal *inter = temp_int->internal; in altera_pid_feed_control() local
590 struct netup_hw_pid_filter *pid_filt = inter->pid_filt[filt_nr - 1]; in altera_pid_feed_control()
592 altera_pid_control(pid_filt, feed->pid, onoff ? 0 : 1); in altera_pid_feed_control()
595 pid_filt->start_feed(feed); in altera_pid_feed_control()
597 pid_filt->stop_feed(feed); in altera_pid_feed_control()
599 if (feed->pid == 0x2000) in altera_pid_feed_control()
608 altera_pid_feed_control(feed->demux, num, feed, 1); in altera_ci_start_feed()
615 altera_pid_feed_control(feed->demux, num, feed, 0); in altera_ci_stop_feed()
643 struct fpga_inode *temp_int = find_inode(config->dev); in altera_hw_filt_init()
644 struct fpga_internal *inter = NULL; in altera_hw_filt_init() local
652 ret = -ENOMEM; in altera_hw_filt_init()
657 inter = temp_int->internal; in altera_hw_filt_init()
658 (inter->filts_used)++; in altera_hw_filt_init()
661 inter = kzalloc(sizeof(struct fpga_internal), GFP_KERNEL); in altera_hw_filt_init()
662 if (!inter) { in altera_hw_filt_init()
663 ret = -ENOMEM; in altera_hw_filt_init()
667 temp_int = append_internal(inter); in altera_hw_filt_init()
669 ret = -ENOMEM; in altera_hw_filt_init()
672 inter->filts_used = 1; in altera_hw_filt_init()
673 inter->dev = config->dev; in altera_hw_filt_init()
674 inter->fpga_rw = config->fpga_rw; in altera_hw_filt_init()
675 mutex_init(&inter->fpga_mutex); in altera_hw_filt_init()
676 inter->strt_wrk = 1; in altera_hw_filt_init()
681 pid_filt, hw_filt_nr - 1); in altera_hw_filt_init()
682 inter->pid_filt[hw_filt_nr - 1] = pid_filt; in altera_hw_filt_init()
683 pid_filt->demux = config->demux; in altera_hw_filt_init()
684 pid_filt->internal = inter; in altera_hw_filt_init()
685 pid_filt->nr = hw_filt_nr - 1; in altera_hw_filt_init()
687 pid_filt->start_feed = config->demux->start_feed; in altera_hw_filt_init()
688 pid_filt->stop_feed = config->demux->stop_feed; in altera_hw_filt_init()
691 pid_filt->demux->start_feed = altera_ci_start_feed_1; in altera_hw_filt_init()
692 pid_filt->demux->stop_feed = altera_ci_stop_feed_1; in altera_hw_filt_init()
694 pid_filt->demux->start_feed = altera_ci_start_feed_2; in altera_hw_filt_init()
695 pid_filt->demux->stop_feed = altera_ci_stop_feed_2; in altera_hw_filt_init()
706 kfree(inter); in altera_hw_filt_init()
714 struct fpga_inode *temp_int = find_inode(config->dev); in altera_ci_init()
715 struct fpga_internal *inter = NULL; in altera_ci_init() local
724 ret = -ENOMEM; in altera_ci_init()
729 inter = temp_int->internal; in altera_ci_init()
730 (inter->cis_used)++; in altera_ci_init()
731 inter->fpga_rw = config->fpga_rw; in altera_ci_init()
734 inter = kzalloc(sizeof(struct fpga_internal), GFP_KERNEL); in altera_ci_init()
735 if (!inter) { in altera_ci_init()
736 ret = -ENOMEM; in altera_ci_init()
740 temp_int = append_internal(inter); in altera_ci_init()
742 ret = -ENOMEM; in altera_ci_init()
745 inter->cis_used = 1; in altera_ci_init()
746 inter->dev = config->dev; in altera_ci_init()
747 inter->fpga_rw = config->fpga_rw; in altera_ci_init()
748 mutex_init(&inter->fpga_mutex); in altera_ci_init()
749 inter->strt_wrk = 1; in altera_ci_init()
754 state, ci_nr - 1); in altera_ci_init()
755 state->internal = inter; in altera_ci_init()
756 state->nr = ci_nr - 1; in altera_ci_init()
758 state->ca.owner = THIS_MODULE; in altera_ci_init()
759 state->ca.read_attribute_mem = altera_ci_read_attribute_mem; in altera_ci_init()
760 state->ca.write_attribute_mem = altera_ci_write_attribute_mem; in altera_ci_init()
761 state->ca.read_cam_control = altera_ci_read_cam_ctl; in altera_ci_init()
762 state->ca.write_cam_control = altera_ci_write_cam_ctl; in altera_ci_init()
763 state->ca.slot_reset = altera_ci_slot_reset; in altera_ci_init()
764 state->ca.slot_shutdown = altera_ci_slot_shutdown; in altera_ci_init()
765 state->ca.slot_ts_enable = altera_ci_slot_ts_ctl; in altera_ci_init()
766 state->ca.poll_slot_status = altera_poll_ci_slot_status; in altera_ci_init()
767 state->ca.data = state; in altera_ci_init()
769 ret = dvb_ca_en50221_init(config->adapter, in altera_ci_init()
770 &state->ca, in altera_ci_init()
776 inter->state[ci_nr - 1] = state; in altera_ci_init()
780 if (inter->strt_wrk) { in altera_ci_init()
781 INIT_WORK(&inter->work, netup_read_ci_status); in altera_ci_init()
782 inter->strt_wrk = 0; in altera_ci_init()
787 mutex_lock(&inter->fpga_mutex); in altera_ci_init()
790 netup_fpga_op_rw(inter, NETUP_CI_TSA_DIV, 0x0, 0); in altera_ci_init()
791 netup_fpga_op_rw(inter, NETUP_CI_TSB_DIV, 0x0, 0); in altera_ci_init()
794 store = netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL2, 0, NETUP_CI_FLG_RD); in altera_ci_init()
796 netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL2, store, 0); in altera_ci_init()
798 ret = netup_fpga_op_rw(inter, NETUP_CI_REVISION, 0, NETUP_CI_FLG_RD); in altera_ci_init()
800 netup_fpga_op_rw(inter, NETUP_CI_INT_CTRL, 0x44, 0); in altera_ci_init()
802 mutex_unlock(&inter->fpga_mutex); in altera_ci_init()
806 schedule_work(&inter->work); in altera_ci_init()
813 kfree(inter); in altera_ci_init()
822 struct fpga_internal *inter = NULL; in altera_ci_tuner_reset() local
828 return -1; in altera_ci_tuner_reset()
830 if (temp_int->internal == NULL) in altera_ci_tuner_reset()
831 return -1; in altera_ci_tuner_reset()
833 inter = temp_int->internal; in altera_ci_tuner_reset()
835 mutex_lock(&inter->fpga_mutex); in altera_ci_tuner_reset()
837 store = netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL2, 0, NETUP_CI_FLG_RD); in altera_ci_tuner_reset()
838 store &= ~(4 << (2 - ci_nr)); in altera_ci_tuner_reset()
839 netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL2, store, 0); in altera_ci_tuner_reset()
841 store |= (4 << (2 - ci_nr)); in altera_ci_tuner_reset()
842 netup_fpga_op_rw(inter, NETUP_CI_BUSCTRL2, store, 0); in altera_ci_tuner_reset()
844 mutex_unlock(&inter->fpga_mutex); in altera_ci_tuner_reset()