Lines Matching +full:auto +full:- +full:i2c
4 * CIMax2(R) SP2 driver in conjunction with NetUp Dual DVB-S2 CI card
26 /* Max transfer size done by I2C transfer functions */
30 bits 31-16
31 +-----------+
33 +-----------+
35 +-------+-------+-------+-------+-------+-------+-------+-------+
37 +-------+-------+-------+-------+-------+-------+-------+-------+
39 +-------+-------+-------+-------+-------+-------+-------+-------+
41 +-------+-------+-------+-------+-------+-------+-------+-------+
113 ci_dbg_print("%s: i2c read error, Reg = 0x%02x, Status = %d\n", in netup_read_i2c()
116 return -1; in netup_read_i2c()
119 ci_dbg_print("%s: i2c read Addr=0x%04x, Reg = 0x%02x, data = %02x\n", in netup_read_i2c()
139 pr_warn("%s: i2c wr reg=%04x: len=%d is too big!\n", in netup_write_i2c()
141 return -EINVAL; in netup_write_i2c()
150 ci_dbg_print("%s: i2c write error, Reg=[0x%02x], Status=%d\n", in netup_write_i2c()
152 return -1; in netup_write_i2c()
180 struct netup_ci_state *state = en50221->data; in netup_ci_op_cam()
181 struct cx23885_tsport *port = state->priv; in netup_ci_op_cam()
182 struct cx23885_dev *dev = port->dev; in netup_ci_op_cam()
189 return -EINVAL; in netup_ci_op_cam()
191 if (state->current_ci_flag != flag) { in netup_ci_op_cam()
192 ret = netup_read_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_op_cam()
200 ret = netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_op_cam()
205 state->current_ci_flag = flag; in netup_ci_op_cam()
207 mutex_lock(&dev->gpio_lock); in netup_ci_op_cam()
225 (state->ci_i2c_addr == 0x40) ? NETUP_CS0 : NETUP_CS1); in netup_ci_op_cam()
230 mutex_unlock(&dev->gpio_lock); in netup_ci_op_cam()
234 return -EREMOTEIO; in netup_ci_op_cam()
237 (read) ? "read" : "write", state->ci_i2c_addr, addr, in netup_ci_op_cam()
274 struct netup_ci_state *state = en50221->data; in netup_ci_slot_reset()
279 return -EINVAL; in netup_ci_slot_reset()
282 ret = netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_slot_reset()
291 ret = netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_slot_reset()
295 dvb_ca_en50221_camready_irq(&state->ca, 0); in netup_ci_slot_reset()
309 struct netup_ci_state *state = en50221->data; in netup_ci_set_irq()
312 if (irq_mode == state->current_irq_mode) in netup_ci_set_irq()
316 __func__, state->ci_i2c_addr, irq_mode); in netup_ci_set_irq()
317 ret = netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_set_irq()
323 state->current_irq_mode = irq_mode; in netup_ci_set_irq()
330 struct netup_ci_state *state = en50221->data; in netup_ci_slot_ts_ctl()
334 return -EINVAL; in netup_ci_slot_ts_ctl()
336 netup_read_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_slot_ts_ctl()
340 return netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_slot_ts_ctl()
353 dvb_ca_en50221_frda_irq(&state->ca, 0); in netup_read_ci_status()
355 /* CAM module INSERT/REMOVE processing. slow operation because of i2c in netup_read_ci_status()
357 if (time_after(jiffies, state->next_status_checked_time) in netup_read_ci_status()
358 || !state->status) { in netup_read_ci_status()
359 ret = netup_read_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_read_ci_status()
362 state->next_status_checked_time = jiffies in netup_read_ci_status()
369 __func__, state->ci_i2c_addr, 0, buf[0], buf[0]); in netup_read_ci_status()
373 state->status = DVB_CA_EN50221_POLL_CAM_PRESENT | in netup_read_ci_status()
376 state->status = 0; in netup_read_ci_status()
392 port = &dev->ts1; in netup_ci_slot_status()
393 state = port->port_priv; in netup_ci_slot_status()
394 schedule_work(&state->work); in netup_ci_slot_status()
399 port = &dev->ts2; in netup_ci_slot_status()
400 state = port->port_priv; in netup_ci_slot_status()
401 schedule_work(&state->work); in netup_ci_slot_status()
411 struct netup_ci_state *state = en50221->data; in netup_poll_ci_slot_status()
414 return -EINVAL; in netup_poll_ci_slot_status()
419 return state->status; in netup_poll_ci_slot_status()
427 0x00, /* auto select mask high A */ in netup_ci_init()
428 0x00, /* auto select mask low A */ in netup_ci_init()
429 0x00, /* auto select pattern high A */ in netup_ci_init()
430 0x00, /* auto select pattern low A */ in netup_ci_init()
436 0x00, /* auto select mask high B */ in netup_ci_init()
437 0x00, /* auto select mask low B */ in netup_ci_init()
438 0x00, /* auto select pattern high B */ in netup_ci_init()
439 0x00, /* auto select pattern low B */ in netup_ci_init()
444 0x00, /* auto select mask high Ext */ in netup_ci_init()
445 0x00, /* auto select mask low Ext */ in netup_ci_init()
446 0x00, /* auto select pattern high Ext */ in netup_ci_init()
447 0x00, /* auto select pattern low Ext */ in netup_ci_init()
449 0x02, /* destination - module A */ in netup_ci_init()
454 0x05, /* EXTINT=active-high, INT=push-pull */ in netup_ci_init()
467 ret = -ENOMEM; in netup_ci_init()
471 port->port_priv = state; in netup_ci_init()
473 switch (port->nr) { in netup_ci_init()
475 state->ci_i2c_addr = 0x40; in netup_ci_init()
478 state->ci_i2c_addr = 0x41; in netup_ci_init()
482 state->i2c_adap = &port->dev->i2c_bus[0].i2c_adap; in netup_ci_init()
483 state->ca.owner = THIS_MODULE; in netup_ci_init()
484 state->ca.read_attribute_mem = netup_ci_read_attribute_mem; in netup_ci_init()
485 state->ca.write_attribute_mem = netup_ci_write_attribute_mem; in netup_ci_init()
486 state->ca.read_cam_control = netup_ci_read_cam_ctl; in netup_ci_init()
487 state->ca.write_cam_control = netup_ci_write_cam_ctl; in netup_ci_init()
488 state->ca.slot_reset = netup_ci_slot_reset; in netup_ci_init()
489 state->ca.slot_shutdown = netup_ci_slot_shutdown; in netup_ci_init()
490 state->ca.slot_ts_enable = netup_ci_slot_ts_ctl; in netup_ci_init()
491 state->ca.poll_slot_status = netup_poll_ci_slot_status; in netup_ci_init()
492 state->ca.data = state; in netup_ci_init()
493 state->priv = port; in netup_ci_init()
494 state->current_irq_mode = ci_irq_flags() | NETUP_IRQ_DETAM; in netup_ci_init()
496 ret = netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_init()
499 ret |= netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_init()
502 ret |= netup_write_i2c(state->i2c_adap, state->ci_i2c_addr, in netup_ci_init()
508 ret = dvb_ca_en50221_init(&port->frontends.adapter, in netup_ci_init()
509 &state->ca, in netup_ci_init()
515 INIT_WORK(&state->work, netup_read_ci_status); in netup_ci_init()
516 schedule_work(&state->work); in netup_ci_init()
534 state = (struct netup_ci_state *)port->port_priv; in netup_ci_exit()
538 if (NULL == state->ca.data) in netup_ci_exit()
541 dvb_ca_en50221_release(&state->ca); in netup_ci_exit()