/*----------------------------------------------------------------------------*/ int hwmsen_read_block(struct i2c_client *client, u8 addr, u8 *data, u8 len) { if (len == 1) { return hwmsen_read_byte(client, addr, data); } else { u8 beg = addr; struct i2c_msg msgs[2] = { { .addr = client->addr, .flags = 0, .len = 1, .buf= &beg }, { .addr = client->addr, .flags = I2C_M_RD, .len = len, .buf = data, } };
/*----------------------------------------------------------------------------*/ int hwmsen_clr_bits(struct i2c_client *client, u8 addr, u8 bits) { int err; u8 cur, nxt; if ((err = hwmsen_read_byte(client, addr, &cur))) { HWM_ERR("read err: 0x%02X\n", addr); return -EFAULT; } nxt = cur & (~bits); if (nxt ^ cur) { if ((err = hwmsen_write_byte(client, addr, nxt))) { HWM_ERR("write err: 0x%02X\n", addr); return -EFAULT; } } return 0; }
static int SANLED_marquee_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { int err = 0; u8 dat; printk("HMH marquee i2c probe \n"); SANLED_marquee_i2c_client = client; //SANLED_marquee_i2c_client->timing = 100; if((err = hwmsen_read_byte(SANLED_marquee_i2c_client, 0x10, &dat))) { printk("read data fail!!\n"); return err; } printk("HMH aw9523b aw9523b id = 0x%x \n",dat); if((err = aw9523b_init_device(SANLED_marquee_i2c_client))) { printk("init dev: %d\n", err); return err; } if(err = misc_register(&SANLED_device)) { printk("HMH marquee SANLED_marquee_i2c_probe register failed\n"); } init_waitqueue_head(&SANLED_waitMain); thread = kthread_run(SANLED_event_handler, 0, SANLED_marquee_DEV_NAME); if (IS_ERR(thread)) { err = PTR_ERR(thread); printk("HMH marquee failed to create kernel thread: %d\n", err); } return err; }