Lines Matching refs:ir
47 int (*get_key_i2c)(struct au0828_rc *ir);
54 static int au8522_rc_write(struct au0828_rc *ir, u16 reg, u8 data) in au8522_rc_write() argument
58 struct i2c_msg msg = { .addr = ir->i2c_dev_addr, .flags = 0, in au8522_rc_write()
61 rc = i2c_transfer(ir->dev->i2c_client.adapter, &msg, 1); in au8522_rc_write()
69 static int au8522_rc_read(struct au0828_rc *ir, u16 reg, int val, in au8522_rc_read() argument
74 struct i2c_msg msg[2] = { { .addr = ir->i2c_dev_addr, .flags = 0, in au8522_rc_read()
76 { .addr = ir->i2c_dev_addr, .flags = I2C_M_RD, in au8522_rc_read()
86 rc = i2c_transfer(ir->dev->i2c_client.adapter, msg, 2); in au8522_rc_read()
94 static int au8522_rc_andor(struct au0828_rc *ir, u16 reg, u8 mask, u8 value) in au8522_rc_andor() argument
99 rc = au8522_rc_read(ir, reg, -1, &buf, 1); in au8522_rc_andor()
110 return au8522_rc_write(ir, reg, buf); in au8522_rc_andor()
113 #define au8522_rc_set(ir, reg, bit) au8522_rc_andor(ir, (reg), (bit), (bit)) argument
114 #define au8522_rc_clear(ir, reg, bit) au8522_rc_andor(ir, (reg), (bit), 0) argument
124 static int au0828_get_key_au8522(struct au0828_rc *ir) in au0828_get_key_au8522() argument
133 if (test_bit(DEV_DISCONNECTED, &ir->dev->dev_state)) in au0828_get_key_au8522()
137 rc = au8522_rc_read(ir, 0xe1, -1, buf, 1); in au0828_get_key_au8522()
140 au8522_rc_set(ir, 0xe0, 1 << 4); in au0828_get_key_au8522()
145 rc = au8522_rc_read(ir, 0xe3, 0x11, buf, sizeof(buf)); in au0828_get_key_au8522()
152 au8522_rc_clear(ir, 0xe0, 1 << 4); in au0828_get_key_au8522()
155 au8522_rc_set(ir, 0xe0, 1 << 4); in au0828_get_key_au8522()
197 ir_raw_event_store(ir->rc, &rawir); in au0828_get_key_au8522()
206 ir_raw_event_store(ir->rc, &rawir); in au0828_get_key_au8522()
219 ir_raw_event_store(ir->rc, &rawir); in au0828_get_key_au8522()
221 ir_raw_event_handle(ir->rc); in au0828_get_key_au8522()
232 struct au0828_rc *ir = container_of(work, struct au0828_rc, work.work); in au0828_rc_work() local
235 rc = ir->get_key_i2c(ir); in au0828_rc_work()
239 schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling)); in au0828_rc_work()
244 struct au0828_rc *ir = rc->priv; in au0828_rc_start() local
246 INIT_DELAYED_WORK(&ir->work, au0828_rc_work); in au0828_rc_start()
249 au8522_rc_set(ir, 0xe0, 1 << 4); in au0828_rc_start()
251 schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling)); in au0828_rc_start()
258 struct au0828_rc *ir = rc->priv; in au0828_rc_stop() local
260 cancel_delayed_work_sync(&ir->work); in au0828_rc_stop()
263 if (!test_bit(DEV_DISCONNECTED, &ir->dev->dev_state)) { in au0828_rc_stop()
265 au8522_rc_clear(ir, 0xe0, 1 << 4); in au0828_rc_stop()
288 struct au0828_rc *ir; in au0828_rc_register() local
300 ir = kzalloc(sizeof(*ir), GFP_KERNEL); in au0828_rc_register()
302 if (!ir || !rc) in au0828_rc_register()
306 ir->dev = dev; in au0828_rc_register()
307 dev->ir = ir; in au0828_rc_register()
308 ir->rc = rc; in au0828_rc_register()
310 rc->priv = ir; in au0828_rc_register()
318 ir->get_key_i2c = au0828_get_key_au8522; in au0828_rc_register()
325 ir->i2c_dev_addr = i2c_rc_dev_addr; in au0828_rc_register()
329 ir->polling = 100; /* ms */ in au0828_rc_register()
332 snprintf(ir->name, sizeof(ir->name), "au0828 IR (%s)", in au0828_rc_register()
335 usb_make_path(dev->usbdev, ir->phys, sizeof(ir->phys)); in au0828_rc_register()
336 strlcat(ir->phys, "/input0", sizeof(ir->phys)); in au0828_rc_register()
338 rc->input_name = ir->name; in au0828_rc_register()
339 rc->input_phys = ir->phys; in au0828_rc_register()
354 pr_info("Remote controller %s initalized\n", ir->name); in au0828_rc_register()
359 dev->ir = NULL; in au0828_rc_register()
361 kfree(ir); in au0828_rc_register()
367 struct au0828_rc *ir = dev->ir; in au0828_rc_unregister() local
370 if (!ir) in au0828_rc_unregister()
373 rc_unregister_device(ir->rc); in au0828_rc_unregister()
376 kfree(ir); in au0828_rc_unregister()
377 dev->ir = NULL; in au0828_rc_unregister()
382 struct au0828_rc *ir = dev->ir; in au0828_rc_suspend() local
384 if (!ir) in au0828_rc_suspend()
389 cancel_delayed_work_sync(&ir->work); in au0828_rc_suspend()
392 au8522_rc_clear(ir, 0xe0, 1 << 4); in au0828_rc_suspend()
399 struct au0828_rc *ir = dev->ir; in au0828_rc_resume() local
401 if (!ir) in au0828_rc_resume()
407 au8522_rc_set(ir, 0xe0, 1 << 4); in au0828_rc_resume()
409 schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling)); in au0828_rc_resume()