/* init + register i2c algo-bit adapter */ int au0828_i2c_register(struct au0828_dev *dev) { dprintk(1, "%s()\n", __func__); memcpy(&dev->i2c_adap, &au0828_i2c_adap_template, sizeof(dev->i2c_adap)); memcpy(&dev->i2c_algo, &au0828_i2c_algo_template, sizeof(dev->i2c_algo)); memcpy(&dev->i2c_client, &au0828_i2c_client_template, sizeof(dev->i2c_client)); dev->i2c_adap.dev.parent = &dev->usbdev->dev; strlcpy(dev->i2c_adap.name, DRIVER_NAME, sizeof(dev->i2c_adap.name)); dev->i2c_adap.algo = &dev->i2c_algo; dev->i2c_adap.algo_data = dev; i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev); i2c_add_adapter(&dev->i2c_adap); dev->i2c_client.adapter = &dev->i2c_adap; if (0 == dev->i2c_rc) { printk(KERN_INFO "%s: i2c bus registered\n", DRIVER_NAME); if (i2c_scan) do_i2c_scan(DRIVER_NAME, &dev->i2c_client); } else printk(KERN_INFO "%s: i2c bus register FAILED\n", DRIVER_NAME); return dev->i2c_rc; }
/* init + register i2c algo-bit adapter */ int cx23885_i2c_register(struct cx23885_i2c *bus) { struct cx23885_dev *dev = bus->dev; dprintk(1, "%s(bus = %d)\n", __func__, bus->nr); memcpy(&bus->i2c_adap, &cx23885_i2c_adap_template, sizeof(bus->i2c_adap)); memcpy(&bus->i2c_algo, &cx23885_i2c_algo_template, sizeof(bus->i2c_algo)); memcpy(&bus->i2c_client, &cx23885_i2c_client_template, sizeof(bus->i2c_client)); bus->i2c_adap.dev.parent = &dev->pci->dev; strlcpy(bus->i2c_adap.name, bus->dev->name, sizeof(bus->i2c_adap.name)); bus->i2c_algo.data = bus; bus->i2c_adap.algo_data = bus; i2c_set_adapdata(&bus->i2c_adap, &dev->v4l2_dev); i2c_add_adapter(&bus->i2c_adap); bus->i2c_client.adapter = &bus->i2c_adap; if (0 == bus->i2c_rc) { dprintk(1, "%s: i2c bus %d registered\n", dev->name, bus->nr); if (i2c_scan) { printk(KERN_INFO "%s: scan bus %d:\n", dev->name, bus->nr); do_i2c_scan(dev->name, &bus->i2c_client); } } else printk(KERN_WARNING "%s: i2c bus %d register FAILED\n", dev->name, bus->nr); /* Instantiate the IR receiver device, if present */ if (0 == bus->i2c_rc) { struct i2c_board_info info; const unsigned short addr_list[] = { 0x6b, I2C_CLIENT_END }; memset(&info, 0, sizeof(struct i2c_board_info)); strlcpy(info.type, "ir_video", I2C_NAME_SIZE); /* Use quick read command for probe, some IR chips don't * support writes */ i2c_new_probed_device(&bus->i2c_adap, &info, addr_list, i2c_probe_func_quick_read); } return bus->i2c_rc; }
/* init + register i2c algo-bit adapter */ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci) { /* Prevents usage of invalid delay values */ if (i2c_udelay<5) i2c_udelay=5; memcpy(&core->i2c_algo, &cx8800_i2c_algo_template, sizeof(core->i2c_algo)); core->i2c_adap.dev.parent = &pci->dev; strlcpy(core->i2c_adap.name,core->name,sizeof(core->i2c_adap.name)); core->i2c_adap.owner = THIS_MODULE; core->i2c_adap.id = I2C_HW_B_CX2388x; core->i2c_algo.udelay = i2c_udelay; core->i2c_algo.data = core; i2c_set_adapdata(&core->i2c_adap, &core->v4l2_dev); core->i2c_adap.algo_data = &core->i2c_algo; core->i2c_client.adapter = &core->i2c_adap; strlcpy(core->i2c_client.name, "cx88xx internal", I2C_NAME_SIZE); cx8800_bit_setscl(core,1); cx8800_bit_setsda(core,1); core->i2c_rc = i2c_bit_add_bus(&core->i2c_adap); if (0 == core->i2c_rc) { static u8 tuner_data[] = { 0x0b, 0xdc, 0x86, 0x52 }; static struct i2c_msg tuner_msg = { .flags = 0, .addr = 0xc2 >> 1, .buf = tuner_data, .len = 4 }; dprintk(1, "i2c register ok\n"); switch( core->boardnr ) { case CX88_BOARD_HAUPPAUGE_HVR1300: case CX88_BOARD_HAUPPAUGE_HVR3000: case CX88_BOARD_HAUPPAUGE_HVR4000: printk("%s: i2c init: enabling analog demod on HVR1300/3000/4000 tuner\n", core->name); i2c_transfer(core->i2c_client.adapter, &tuner_msg, 1); break; default: break; } if (i2c_scan) do_i2c_scan(core->name,&core->i2c_client); } else printk("%s: i2c register FAILED\n", core->name); return core->i2c_rc; }
/* init + register i2c algo-bit adapter */ int __devinit init_bttv_i2c(struct bttv *btv) { strlcpy(btv->i2c_client.name, "bttv internal", I2C_NAME_SIZE); if (i2c_hw) btv->use_i2c_hw = 1; if (btv->use_i2c_hw) { /* bt878 */ strlcpy(btv->c.i2c_adap.name, "bt878", sizeof(btv->c.i2c_adap.name)); btv->c.i2c_adap.algo = &bttv_algo; } else { /* bt848 */ /* Prevents usage of invalid delay values */ if (i2c_udelay<5) i2c_udelay=5; strlcpy(btv->c.i2c_adap.name, "bttv", sizeof(btv->c.i2c_adap.name)); memcpy(&btv->i2c_algo, &bttv_i2c_algo_bit_template, sizeof(bttv_i2c_algo_bit_template)); btv->i2c_algo.udelay = i2c_udelay; btv->i2c_algo.data = btv; btv->c.i2c_adap.algo_data = &btv->i2c_algo; } btv->c.i2c_adap.owner = THIS_MODULE; btv->c.i2c_adap.dev.parent = &btv->c.pci->dev; snprintf(btv->c.i2c_adap.name, sizeof(btv->c.i2c_adap.name), "bt%d #%d [%s]", btv->id, btv->c.nr, btv->use_i2c_hw ? "hw" : "sw"); i2c_set_adapdata(&btv->c.i2c_adap, &btv->c.v4l2_dev); btv->i2c_client.adapter = &btv->c.i2c_adap; if (btv->use_i2c_hw) { btv->i2c_rc = i2c_add_adapter(&btv->c.i2c_adap); } else { bttv_bit_setscl(btv,1); bttv_bit_setsda(btv,1); btv->i2c_rc = i2c_bit_add_bus(&btv->c.i2c_adap); } if (0 == btv->i2c_rc && i2c_scan) do_i2c_scan(btv->c.v4l2_dev.name, &btv->i2c_client); return btv->i2c_rc; }
int saa7134_i2c_register(struct saa7134_dev *dev) { dev->i2c_adap = saa7134_adap_template; dev->i2c_adap.dev.parent = &dev->pci->dev; strcpy(dev->i2c_adap.name,dev->name); dev->i2c_adap.algo_data = dev; i2c_add_adapter(&dev->i2c_adap); dev->i2c_client = saa7134_client_template; dev->i2c_client.adapter = &dev->i2c_adap; saa7134_i2c_eeprom(dev,dev->eedata,sizeof(dev->eedata)); if (i2c_scan) do_i2c_scan(dev->name,&dev->i2c_client); return 0; }
int saa7134_i2c_register(struct saa7134_dev *dev) { dev->i2c_adap = saa7134_adap_template; dev->i2c_adap.dev.parent = &dev->pci->dev; strcpy(dev->i2c_adap.name,dev->name); dev->i2c_adap.algo_data = dev; i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev); i2c_add_adapter(&dev->i2c_adap); dev->i2c_client = saa7134_client_template; dev->i2c_client.adapter = &dev->i2c_adap; saa7134_i2c_eeprom(dev,dev->eedata,sizeof(dev->eedata)); if (i2c_scan) do_i2c_scan(dev->name,&dev->i2c_client); /* Instantiate the IR receiver device, if present */ saa7134_probe_i2c_ir(dev); return 0; }
int main(int argc, char *argv[]) { int fd; int ch, rflag; int mode; setprogname(*argv); rflag = 0; while ((ch = getopt(argc, argv, "r")) != -1) switch (ch) { case 'r': rflag = 1; break; default: break; } argv += optind; argc -= optind; if (rflag) mode = MODE_READ; else mode = MODE_DEFAULT; if (*argv == NULL) usage(); fd = open(*argv, O_RDWR); if (fd == -1) err(EXIT_FAILURE, "couldn't open %s", *argv); do_i2c_scan(*argv, fd, mode); close(fd); return EXIT_SUCCESS; }
/* init + register i2c algo-bit adapter */ int cx23885_i2c_register(struct cx23885_i2c *bus) { struct cx23885_dev *dev = bus->dev; dprintk(1, "%s(bus = %d)\n", __func__, bus->nr); memcpy(&bus->i2c_adap, &cx23885_i2c_adap_template, sizeof(bus->i2c_adap)); memcpy(&bus->i2c_algo, &cx23885_i2c_algo_template, sizeof(bus->i2c_algo)); memcpy(&bus->i2c_client, &cx23885_i2c_client_template, sizeof(bus->i2c_client)); bus->i2c_adap.dev.parent = &dev->pci->dev; strlcpy(bus->i2c_adap.name, bus->dev->name, sizeof(bus->i2c_adap.name)); bus->i2c_algo.data = bus; bus->i2c_adap.algo_data = bus; i2c_set_adapdata(&bus->i2c_adap, &dev->v4l2_dev); i2c_add_adapter(&bus->i2c_adap); bus->i2c_client.adapter = &bus->i2c_adap; if (0 == bus->i2c_rc) { dprintk(1, "%s: i2c bus %d registered\n", dev->name, bus->nr); if (i2c_scan) { printk(KERN_INFO "%s: scan bus %d:\n", dev->name, bus->nr); do_i2c_scan(dev->name, &bus->i2c_client); } } else printk(KERN_WARNING "%s: i2c bus %d register FAILED\n", dev->name, bus->nr); /* Instantiate the IR receiver device, if present */ if (0 == bus->i2c_rc) { struct i2c_board_info info; const unsigned short addr_list[] = { 0x6b, I2C_CLIENT_END }; memset(&info, 0, sizeof(struct i2c_board_info)); strlcpy(info.type, "ir_video", I2C_NAME_SIZE); #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35) /* Use quick read command for probe, some IR chips don't * support writes */ i2c_new_probed_device(&bus->i2c_adap, &info, addr_list, i2c_probe_func_quick_read); #else #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) /* * We can't call i2c_new_probed_device() because it uses * quick writes for probing and the IR receiver device only * replies to reads. */ if (i2c_smbus_xfer(&bus->i2c_adap, addr_list[0], 0, I2C_SMBUS_READ, 0, I2C_SMBUS_QUICK, NULL) >= 0) { info.addr = addr_list[0]; i2c_new_device(&bus->i2c_adap, &info); } #endif #endif } return bus->i2c_rc; }