Lines Matching refs:hdw

53 static int pvr2_i2c_write(struct pvr2_hdw *hdw, /* Context */  in pvr2_i2c_write()  argument
63 if (length > (sizeof(hdw->cmd_buffer) - 3)) { in pvr2_i2c_write()
68 length,(unsigned int)(sizeof(hdw->cmd_buffer) - 3)); in pvr2_i2c_write()
72 LOCK_TAKE(hdw->ctl_lock); in pvr2_i2c_write()
75 memset(hdw->cmd_buffer, 0, sizeof(hdw->cmd_buffer)); in pvr2_i2c_write()
78 hdw->cmd_buffer[0] = FX2CMD_I2C_WRITE; /* write prefix */ in pvr2_i2c_write()
79 hdw->cmd_buffer[1] = i2c_addr; /* i2c addr of chip */ in pvr2_i2c_write()
80 hdw->cmd_buffer[2] = length; /* length of what follows */ in pvr2_i2c_write()
81 if (length) memcpy(hdw->cmd_buffer + 3, data, length); in pvr2_i2c_write()
84 ret = pvr2_send_request(hdw, in pvr2_i2c_write()
85 hdw->cmd_buffer, in pvr2_i2c_write()
87 hdw->cmd_buffer, in pvr2_i2c_write()
90 if (hdw->cmd_buffer[0] != 8) { in pvr2_i2c_write()
92 if (hdw->cmd_buffer[0] != 7) { in pvr2_i2c_write()
95 i2c_addr,hdw->cmd_buffer[0]); in pvr2_i2c_write()
100 LOCK_GIVE(hdw->ctl_lock); in pvr2_i2c_write()
105 static int pvr2_i2c_read(struct pvr2_hdw *hdw, /* Context */ in pvr2_i2c_read() argument
117 if (dlen > (sizeof(hdw->cmd_buffer) - 4)) { in pvr2_i2c_read()
122 dlen,(unsigned int)(sizeof(hdw->cmd_buffer) - 4)); in pvr2_i2c_read()
125 if (res && (rlen > (sizeof(hdw->cmd_buffer) - 1))) { in pvr2_i2c_read()
130 rlen,(unsigned int)(sizeof(hdw->cmd_buffer) - 1)); in pvr2_i2c_read()
134 LOCK_TAKE(hdw->ctl_lock); in pvr2_i2c_read()
137 memset(hdw->cmd_buffer, 0, sizeof(hdw->cmd_buffer)); in pvr2_i2c_read()
140 hdw->cmd_buffer[0] = FX2CMD_I2C_READ; /* read prefix */ in pvr2_i2c_read()
141 hdw->cmd_buffer[1] = dlen; /* arg length */ in pvr2_i2c_read()
142 hdw->cmd_buffer[2] = rlen; /* answer length. Device will send one in pvr2_i2c_read()
144 hdw->cmd_buffer[3] = i2c_addr; /* i2c addr of chip */ in pvr2_i2c_read()
145 if (dlen) memcpy(hdw->cmd_buffer + 4, data, dlen); in pvr2_i2c_read()
148 ret = pvr2_send_request(hdw, in pvr2_i2c_read()
149 hdw->cmd_buffer, in pvr2_i2c_read()
151 hdw->cmd_buffer, in pvr2_i2c_read()
154 if (hdw->cmd_buffer[0] != 8) { in pvr2_i2c_read()
156 if (hdw->cmd_buffer[0] != 7) { in pvr2_i2c_read()
159 i2c_addr,hdw->cmd_buffer[0]); in pvr2_i2c_read()
170 memcpy(res, hdw->cmd_buffer + 1, rlen); in pvr2_i2c_read()
174 LOCK_GIVE(hdw->ctl_lock); in pvr2_i2c_read()
181 static int pvr2_i2c_basic_op(struct pvr2_hdw *hdw, in pvr2_i2c_basic_op() argument
191 return pvr2_i2c_read(hdw,i2c_addr,wdata,wlen,rdata,rlen); in pvr2_i2c_basic_op()
193 return pvr2_i2c_write(hdw,i2c_addr,wdata,wlen); in pvr2_i2c_basic_op()
204 static int i2c_24xxx_ir(struct pvr2_hdw *hdw, in i2c_24xxx_ir() argument
232 LOCK_TAKE(hdw->ctl_lock); do { in i2c_24xxx_ir()
233 hdw->cmd_buffer[0] = FX2CMD_GET_IR_CODE; in i2c_24xxx_ir()
234 stat = pvr2_send_request(hdw, in i2c_24xxx_ir()
235 hdw->cmd_buffer,1, in i2c_24xxx_ir()
236 hdw->cmd_buffer,4); in i2c_24xxx_ir()
237 dat[0] = hdw->cmd_buffer[0]; in i2c_24xxx_ir()
238 dat[1] = hdw->cmd_buffer[1]; in i2c_24xxx_ir()
239 dat[2] = hdw->cmd_buffer[2]; in i2c_24xxx_ir()
240 dat[3] = hdw->cmd_buffer[3]; in i2c_24xxx_ir()
241 } while (0); LOCK_GIVE(hdw->ctl_lock); in i2c_24xxx_ir()
274 static int i2c_hack_wm8775(struct pvr2_hdw *hdw, in i2c_hack_wm8775() argument
281 return pvr2_i2c_basic_op(hdw,i2c_addr,wdata,wlen,rdata,rlen); in i2c_hack_wm8775()
287 static int i2c_black_hole(struct pvr2_hdw *hdw, in i2c_black_hole() argument
300 static int i2c_hack_cx25840(struct pvr2_hdw *hdw, in i2c_hack_cx25840() argument
306 int state = hdw->i2c_cx25840_hack_state; in i2c_hack_cx25840()
316 return pvr2_i2c_basic_op(hdw,i2c_addr,wdata,wlen,rdata,rlen); in i2c_hack_cx25840()
351 ret = pvr2_i2c_basic_op(hdw,i2c_addr,wbuf,2,rdata,rlen); in i2c_hack_cx25840()
363 hdw->i2c_func[0x44] = NULL; in i2c_hack_cx25840()
364 pvr2_hdw_render_useless(hdw); in i2c_hack_cx25840()
373 hdw->i2c_cx25840_hack_state = state; in i2c_hack_cx25840()
377 hdw->i2c_cx25840_hack_state = state; in i2c_hack_cx25840()
389 struct pvr2_hdw *hdw = (struct pvr2_hdw *)(i2c_adap->algo_data); in pvr2_i2c_xfer() local
396 funcp = hdw->i2c_func[msgs[0].addr]; in pvr2_i2c_xfer()
409 if (funcp(hdw,msgs[0].addr,NULL,0,NULL,0)) { in pvr2_i2c_xfer()
423 if (bcnt > sizeof(hdw->cmd_buffer)-1) { in pvr2_i2c_xfer()
424 bcnt = sizeof(hdw->cmd_buffer)-1; in pvr2_i2c_xfer()
426 if (funcp(hdw,msgs[0].addr,NULL,0, in pvr2_i2c_xfer()
439 if (funcp(hdw,msgs[0].addr, in pvr2_i2c_xfer()
464 if (bcnt > sizeof(hdw->cmd_buffer)-1) { in pvr2_i2c_xfer()
465 bcnt = sizeof(hdw->cmd_buffer)-1; in pvr2_i2c_xfer()
467 if (funcp(hdw,msgs[0].addr, in pvr2_i2c_xfer()
543 static int do_i2c_probe(struct pvr2_hdw *hdw, int addr) in do_i2c_probe() argument
552 rc = i2c_transfer(&hdw->i2c_adap, msg, ARRAY_SIZE(msg)); in do_i2c_probe()
556 static void do_i2c_scan(struct pvr2_hdw *hdw) in do_i2c_scan() argument
559 printk(KERN_INFO "%s: i2c scan beginning\n", hdw->name); in do_i2c_scan()
561 if (do_i2c_probe(hdw, i)) { in do_i2c_scan()
563 hdw->name, i); in do_i2c_scan()
566 printk(KERN_INFO "%s: i2c scan done.\n", hdw->name); in do_i2c_scan()
569 static void pvr2_i2c_register_ir(struct pvr2_hdw *hdw) in pvr2_i2c_register_ir() argument
572 struct IR_i2c_init_data *init_data = &hdw->ir_init_data; in pvr2_i2c_register_ir()
579 switch (hdw->ir_scheme_active) { in pvr2_i2c_register_ir()
585 init_data->name = hdw->hdw_desc->description; in pvr2_i2c_register_ir()
593 i2c_new_device(&hdw->i2c_adap, &info); in pvr2_i2c_register_ir()
600 init_data->name = hdw->hdw_desc->description; in pvr2_i2c_register_ir()
607 i2c_new_device(&hdw->i2c_adap, &info); in pvr2_i2c_register_ir()
614 i2c_new_device(&hdw->i2c_adap, &info); in pvr2_i2c_register_ir()
623 void pvr2_i2c_core_init(struct pvr2_hdw *hdw) in pvr2_i2c_core_init() argument
630 hdw->i2c_func[idx] = pvr2_i2c_basic_op; in pvr2_i2c_core_init()
634 if (ir_mode[hdw->unit_number] == 0) { in pvr2_i2c_core_init()
635 printk(KERN_INFO "%s: IR disabled\n",hdw->name); in pvr2_i2c_core_init()
636 hdw->i2c_func[0x18] = i2c_black_hole; in pvr2_i2c_core_init()
637 } else if (ir_mode[hdw->unit_number] == 1) { in pvr2_i2c_core_init()
638 if (hdw->ir_scheme_active == PVR2_IR_SCHEME_24XXX) { in pvr2_i2c_core_init()
641 hdw->i2c_func[0x18] = i2c_24xxx_ir; in pvr2_i2c_core_init()
644 if (hdw->hdw_desc->flag_has_cx25840) { in pvr2_i2c_core_init()
645 hdw->i2c_func[0x44] = i2c_hack_cx25840; in pvr2_i2c_core_init()
647 if (hdw->hdw_desc->flag_has_wm8775) { in pvr2_i2c_core_init()
648 hdw->i2c_func[0x1b] = i2c_hack_wm8775; in pvr2_i2c_core_init()
652 hdw->i2c_adap = pvr2_i2c_adap_template; in pvr2_i2c_core_init()
653 hdw->i2c_algo = pvr2_i2c_algo_template; in pvr2_i2c_core_init()
654 strlcpy(hdw->i2c_adap.name,hdw->name,sizeof(hdw->i2c_adap.name)); in pvr2_i2c_core_init()
655 hdw->i2c_adap.dev.parent = &hdw->usb_dev->dev; in pvr2_i2c_core_init()
656 hdw->i2c_adap.algo = &hdw->i2c_algo; in pvr2_i2c_core_init()
657 hdw->i2c_adap.algo_data = hdw; in pvr2_i2c_core_init()
658 hdw->i2c_linked = !0; in pvr2_i2c_core_init()
659 i2c_set_adapdata(&hdw->i2c_adap, &hdw->v4l2_dev); in pvr2_i2c_core_init()
660 i2c_add_adapter(&hdw->i2c_adap); in pvr2_i2c_core_init()
661 if (hdw->i2c_func[0x18] == i2c_24xxx_ir) { in pvr2_i2c_core_init()
668 if (do_i2c_probe(hdw, 0x71)) { in pvr2_i2c_core_init()
672 hdw->i2c_func[0x18] = NULL; in pvr2_i2c_core_init()
674 hdw->ir_scheme_active = PVR2_IR_SCHEME_24XXX_MCE; in pvr2_i2c_core_init()
677 if (i2c_scan) do_i2c_scan(hdw); in pvr2_i2c_core_init()
679 pvr2_i2c_register_ir(hdw); in pvr2_i2c_core_init()
682 void pvr2_i2c_core_done(struct pvr2_hdw *hdw) in pvr2_i2c_core_done() argument
684 if (hdw->i2c_linked) { in pvr2_i2c_core_done()
685 i2c_del_adapter(&hdw->i2c_adap); in pvr2_i2c_core_done()
686 hdw->i2c_linked = 0; in pvr2_i2c_core_done()