Lines Matching +full:i2c +full:- +full:gate

1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * i2c interface support
11 #include "saa7134-reg.h"
19 #include <media/v4l2-common.h>
21 /* ----------------------------------------------------------- */
25 MODULE_PARM_DESC(i2c_debug,"enable debug messages [i2c]");
29 MODULE_PARM_DESC(i2c_scan,"scan i2c bus at insmod time");
33 printk(KERN_DEBUG pr_fmt("i2c: " fmt), ## arg); \
44 /* ----------------------------------------------------------- */
53 IDLE = 0, // no I2C command pending
54 DONE_STOP = 1, // I2C command done and STOP executed
55 BUSY = 2, // executing I2C command
56 TO_SCL = 3, // executing I2C command, time out on clock stretching
58 DONE_WRITE = 5, // I2C command done and awaiting next write command
59 DONE_READ = 6, // I2C command done and awaiting next read command
76 NOP = 0, // no operation on I2C bus
87 i2c_dbg(2, "i2c stat <= %s\n", str_i2c_status[status]); in i2c_get_status()
94 i2c_dbg(2, "i2c stat => %s\n", str_i2c_status[status]); in i2c_set_status()
100 i2c_dbg(2, "i2c attr => %s\n", str_i2c_attr[attr]); in i2c_set_attr()
163 i2c_dbg(2, "i2c reset\n"); in i2c_reset()
201 i2c_dbg(2, "i2c data => 0x%x\n", data); in i2c_send_byte()
204 return -EIO; in i2c_send_byte()
207 return -EIO; in i2c_send_byte()
218 return -EIO; in i2c_recv_byte()
221 return -EIO; in i2c_recv_byte()
223 i2c_dbg(2, "i2c data <= 0x%x\n", data); in i2c_recv_byte()
230 struct saa7134_dev *dev = i2c_adap->algo_data; in saa7134_i2c_xfer()
238 return -EIO; in saa7134_i2c_xfer()
241 i2c_dbg(1, "i2c xfer:"); in saa7134_i2c_xfer()
253 /* workaround for a saa7134 i2c bug in saa7134_i2c_xfer()
278 from Samsung S5H1411. i2c bus gets error in saa7134_i2c_xfer()
302 rc = -EIO; in saa7134_i2c_xfer()
321 /* ----------------------------------------------------------- */
343 /* ----------------------------------------------------------- */
346 * On Medion 7134 reading the SAA7134 chip config EEPROM needs DVB-T
347 * demod i2c gate closed due to an address clash between this EEPROM
364 ret = i2c_transfer(&dev->i2c_adap, i2cgatemsg_r, 2); in saa7134_i2c_eeprom_md7134_gate()
366 pr_debug("%s: DVB-T demod i2c gate was left open\n", in saa7134_i2c_eeprom_md7134_gate()
367 dev->name); in saa7134_i2c_eeprom_md7134_gate()
371 if (i2c_transfer(&dev->i2c_adap, i2cgatemsg_w, 1) != 1) in saa7134_i2c_eeprom_md7134_gate()
372 pr_err("%s: EEPROM i2c gate close failure\n", in saa7134_i2c_eeprom_md7134_gate()
373 dev->name); in saa7134_i2c_eeprom_md7134_gate()
383 if (dev->board == SAA7134_BOARD_MD7134) in saa7134_i2c_eeprom()
386 dev->i2c_client.addr = 0xa0 >> 1; in saa7134_i2c_eeprom()
388 if (1 != (err = i2c_master_send(&dev->i2c_client,&buf,1))) { in saa7134_i2c_eeprom()
390 dev->name,err); in saa7134_i2c_eeprom()
391 return -1; in saa7134_i2c_eeprom()
393 if (len != (err = i2c_master_recv(&dev->i2c_client,eedata,len))) { in saa7134_i2c_eeprom()
394 pr_warn("%s: i2c eeprom read error (err=%d)\n", in saa7134_i2c_eeprom()
395 dev->name,err); in saa7134_i2c_eeprom()
396 return -1; in saa7134_i2c_eeprom()
400 int size = (len - i) > 16 ? 16 : len - i; in saa7134_i2c_eeprom()
402 pr_info("i2c eeprom %02x: %*ph\n", i, size, &eedata[i]); in saa7134_i2c_eeprom()
422 c->addr = i; in do_i2c_scan()
426 pr_info("i2c scan: found device @ 0x%x [%s]\n", in do_i2c_scan()
433 dev->i2c_adap = saa7134_adap_template; in saa7134_i2c_register()
434 dev->i2c_adap.dev.parent = &dev->pci->dev; in saa7134_i2c_register()
435 strscpy(dev->i2c_adap.name, dev->name, sizeof(dev->i2c_adap.name)); in saa7134_i2c_register()
436 dev->i2c_adap.algo_data = dev; in saa7134_i2c_register()
437 i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev); in saa7134_i2c_register()
438 i2c_add_adapter(&dev->i2c_adap); in saa7134_i2c_register()
440 dev->i2c_client = saa7134_client_template; in saa7134_i2c_register()
441 dev->i2c_client.adapter = &dev->i2c_adap; in saa7134_i2c_register()
443 saa7134_i2c_eeprom(dev,dev->eedata,sizeof(dev->eedata)); in saa7134_i2c_register()
445 do_i2c_scan(&dev->i2c_client); in saa7134_i2c_register()
454 i2c_del_adapter(&dev->i2c_adap); in saa7134_i2c_unregister()