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