Lines Matching refs:ab3100
67 struct ab3100 *ab3100 = dev_get_drvdata(dev->parent); in ab3100_get_chip_id() local
69 return (int)ab3100->chip_id; in ab3100_get_chip_id()
72 static int ab3100_set_register_interruptible(struct ab3100 *ab3100, in ab3100_set_register_interruptible() argument
78 err = mutex_lock_interruptible(&ab3100->access_mutex); in ab3100_set_register_interruptible()
87 err = i2c_master_send(ab3100->i2c_client, regandval, 2); in ab3100_set_register_interruptible()
89 dev_err(ab3100->dev, in ab3100_set_register_interruptible()
93 dev_err(ab3100->dev, in ab3100_set_register_interruptible()
102 mutex_unlock(&ab3100->access_mutex); in ab3100_set_register_interruptible()
109 struct ab3100 *ab3100 = dev_get_drvdata(dev->parent); in set_register_interruptible() local
111 return ab3100_set_register_interruptible(ab3100, reg, value); in set_register_interruptible()
121 static int ab3100_set_test_register_interruptible(struct ab3100 *ab3100, in ab3100_set_test_register_interruptible() argument
127 err = mutex_lock_interruptible(&ab3100->access_mutex); in ab3100_set_test_register_interruptible()
131 err = i2c_master_send(ab3100->testreg_client, regandval, 2); in ab3100_set_test_register_interruptible()
133 dev_err(ab3100->dev, in ab3100_set_test_register_interruptible()
137 dev_err(ab3100->dev, in ab3100_set_test_register_interruptible()
146 mutex_unlock(&ab3100->access_mutex); in ab3100_set_test_register_interruptible()
151 static int ab3100_get_register_interruptible(struct ab3100 *ab3100, in ab3100_get_register_interruptible() argument
156 err = mutex_lock_interruptible(&ab3100->access_mutex); in ab3100_get_register_interruptible()
166 err = i2c_master_send(ab3100->i2c_client, ®, 1); in ab3100_get_register_interruptible()
168 dev_err(ab3100->dev, in ab3100_get_register_interruptible()
173 dev_err(ab3100->dev, in ab3100_get_register_interruptible()
184 err = i2c_master_recv(ab3100->i2c_client, regval, 1); in ab3100_get_register_interruptible()
186 dev_err(ab3100->dev, in ab3100_get_register_interruptible()
191 dev_err(ab3100->dev, in ab3100_get_register_interruptible()
203 mutex_unlock(&ab3100->access_mutex); in ab3100_get_register_interruptible()
210 struct ab3100 *ab3100 = dev_get_drvdata(dev->parent); in get_register_interruptible() local
212 return ab3100_get_register_interruptible(ab3100, reg, value); in get_register_interruptible()
215 static int ab3100_get_register_page_interruptible(struct ab3100 *ab3100, in ab3100_get_register_page_interruptible() argument
220 if (ab3100->chip_id == 0xa0 || in ab3100_get_register_page_interruptible()
221 ab3100->chip_id == 0xa1) in ab3100_get_register_page_interruptible()
225 err = mutex_lock_interruptible(&ab3100->access_mutex); in ab3100_get_register_page_interruptible()
232 err = i2c_master_send(ab3100->i2c_client, &first_reg, 1); in ab3100_get_register_page_interruptible()
234 dev_err(ab3100->dev, in ab3100_get_register_page_interruptible()
239 dev_err(ab3100->dev, in ab3100_get_register_page_interruptible()
247 err = i2c_master_recv(ab3100->i2c_client, regvals, numregs); in ab3100_get_register_page_interruptible()
249 dev_err(ab3100->dev, in ab3100_get_register_page_interruptible()
254 dev_err(ab3100->dev, in ab3100_get_register_page_interruptible()
266 mutex_unlock(&ab3100->access_mutex); in ab3100_get_register_page_interruptible()
273 struct ab3100 *ab3100 = dev_get_drvdata(dev->parent); in get_register_page_interruptible() local
275 return ab3100_get_register_page_interruptible(ab3100, in get_register_page_interruptible()
279 static int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100, in ab3100_mask_and_set_register_interruptible() argument
285 err = mutex_lock_interruptible(&ab3100->access_mutex); in ab3100_mask_and_set_register_interruptible()
290 err = i2c_master_send(ab3100->i2c_client, ®, 1); in ab3100_mask_and_set_register_interruptible()
292 dev_err(ab3100->dev, in ab3100_mask_and_set_register_interruptible()
297 dev_err(ab3100->dev, in ab3100_mask_and_set_register_interruptible()
305 err = i2c_master_recv(ab3100->i2c_client, ®andval[1], 1); in ab3100_mask_and_set_register_interruptible()
307 dev_err(ab3100->dev, in ab3100_mask_and_set_register_interruptible()
312 dev_err(ab3100->dev, in ab3100_mask_and_set_register_interruptible()
325 err = i2c_master_send(ab3100->i2c_client, regandval, 2); in ab3100_mask_and_set_register_interruptible()
327 dev_err(ab3100->dev, in ab3100_mask_and_set_register_interruptible()
332 dev_err(ab3100->dev, in ab3100_mask_and_set_register_interruptible()
344 mutex_unlock(&ab3100->access_mutex); in ab3100_mask_and_set_register_interruptible()
351 struct ab3100 *ab3100 = dev_get_drvdata(dev->parent); in mask_and_set_register_interruptible() local
353 return ab3100_mask_and_set_register_interruptible(ab3100, in mask_and_set_register_interruptible()
360 int ab3100_event_register(struct ab3100 *ab3100, in ab3100_event_register() argument
363 return blocking_notifier_chain_register(&ab3100->event_subscribers, in ab3100_event_register()
371 int ab3100_event_unregister(struct ab3100 *ab3100, in ab3100_event_unregister() argument
374 return blocking_notifier_chain_unregister(&ab3100->event_subscribers, in ab3100_event_unregister()
383 struct ab3100 *ab3100 = dev_get_drvdata(dev->parent); in ab3100_event_registers_startup_state_get() local
385 if (!ab3100->startup_events_read) in ab3100_event_registers_startup_state_get()
387 memcpy(event, ab3100->startup_events, 3); in ab3100_event_registers_startup_state_get()
410 struct ab3100 *ab3100 = data; in ab3100_irq_handler() local
415 err = ab3100_get_register_page_interruptible(ab3100, AB3100_EVENTA1, in ab3100_irq_handler()
424 if (!ab3100->startup_events_read) { in ab3100_irq_handler()
425 ab3100->startup_events[0] = event_regs[0]; in ab3100_irq_handler()
426 ab3100->startup_events[1] = event_regs[1]; in ab3100_irq_handler()
427 ab3100->startup_events[2] = event_regs[2]; in ab3100_irq_handler()
428 ab3100->startup_events_read = true; in ab3100_irq_handler()
436 blocking_notifier_call_chain(&ab3100->event_subscribers, in ab3100_irq_handler()
439 dev_dbg(ab3100->dev, in ab3100_irq_handler()
445 dev_dbg(ab3100->dev, in ab3100_irq_handler()
456 struct ab3100 *ab3100 = s->private; in ab3100_registers_print() local
463 ab3100_get_register_interruptible(ab3100, reg, &value); in ab3100_registers_print()
483 struct ab3100 *ab3100; member
492 struct ab3100 *ab3100 = priv->ab3100; in ab3100_get_set_reg() local
534 ab3100_get_register_interruptible(ab3100, user_reg, ®value); in ab3100_get_set_reg()
536 dev_info(ab3100->dev, in ab3100_get_set_reg()
561 ab3100_set_register_interruptible(ab3100, user_reg, user_value); in ab3100_get_set_reg()
562 ab3100_get_register_interruptible(ab3100, user_reg, ®value); in ab3100_get_set_reg()
564 dev_info(ab3100->dev, in ab3100_get_set_reg()
581 static void ab3100_setup_debugfs(struct ab3100 *ab3100) in ab3100_setup_debugfs() argument
587 debugfs_create_file("registers", S_IRUGO, ab3100_dir, ab3100, in ab3100_setup_debugfs()
590 ab3100_get_priv.ab3100 = ab3100; in ab3100_setup_debugfs()
595 ab3100_set_priv.ab3100 = ab3100; in ab3100_setup_debugfs()
601 static inline void ab3100_setup_debugfs(struct ab3100 *ab3100) in ab3100_setup_debugfs() argument
663 static int ab3100_setup(struct ab3100 *ab3100) in ab3100_setup() argument
669 err = ab3100_set_register_interruptible(ab3100, in ab3100_setup()
681 if (ab3100->chip_id == 0xc4) { in ab3100_setup()
682 dev_warn(ab3100->dev, in ab3100_setup()
684 err = ab3100_set_test_register_interruptible(ab3100, in ab3100_setup()
815 struct ab3100 *ab3100; in ab3100_probe() local
821 ab3100 = devm_kzalloc(&client->dev, sizeof(struct ab3100), GFP_KERNEL); in ab3100_probe()
822 if (!ab3100) in ab3100_probe()
826 mutex_init(&ab3100->access_mutex); in ab3100_probe()
827 BLOCKING_INIT_NOTIFIER_HEAD(&ab3100->event_subscribers); in ab3100_probe()
829 ab3100->i2c_client = client; in ab3100_probe()
830 ab3100->dev = &ab3100->i2c_client->dev; in ab3100_probe()
832 i2c_set_clientdata(client, ab3100); in ab3100_probe()
835 err = ab3100_get_register_interruptible(ab3100, AB3100_CID, in ab3100_probe()
836 &ab3100->chip_id); in ab3100_probe()
844 if (ids[i].id == ab3100->chip_id) { in ab3100_probe()
853 snprintf(&ab3100->chip_name[0], in ab3100_probe()
854 sizeof(ab3100->chip_name) - 1, "AB3100 %s", ids[i].name); in ab3100_probe()
858 ab3100->chip_id); in ab3100_probe()
865 &ab3100->chip_name[0]); in ab3100_probe()
868 ab3100->testreg_client = i2c_new_dummy_device(client->adapter, in ab3100_probe()
870 if (IS_ERR(ab3100->testreg_client)) { in ab3100_probe()
871 err = PTR_ERR(ab3100->testreg_client); in ab3100_probe()
875 err = ab3100_setup(ab3100); in ab3100_probe()
881 IRQF_ONESHOT, "ab3100-core", ab3100); in ab3100_probe()
898 ab3100_setup_debugfs(ab3100); in ab3100_probe()
905 i2c_unregister_device(ab3100->testreg_client); in ab3100_probe()