Lines Matching +full:i2c +full:- +full:hid
1 // SPDX-License-Identifier: GPL-2.0
3 * Driver for Elan touchscreens that use the i2c-hid protocol.
11 #include <linux/i2c.h>
18 #include "i2c-hid.h"
43 if (ihid_elan->vcc33) { in elan_i2c_hid_power_up()
44 ret = regulator_enable(ihid_elan->vcc33); in elan_i2c_hid_power_up()
49 ret = regulator_enable(ihid_elan->vccio); in elan_i2c_hid_power_up()
51 regulator_disable(ihid_elan->vcc33); in elan_i2c_hid_power_up()
55 if (ihid_elan->chip_data->post_power_delay_ms) in elan_i2c_hid_power_up()
56 msleep(ihid_elan->chip_data->post_power_delay_ms); in elan_i2c_hid_power_up()
58 gpiod_set_value_cansleep(ihid_elan->reset_gpio, 0); in elan_i2c_hid_power_up()
59 if (ihid_elan->chip_data->post_gpio_reset_on_delay_ms) in elan_i2c_hid_power_up()
60 msleep(ihid_elan->chip_data->post_gpio_reset_on_delay_ms); in elan_i2c_hid_power_up()
70 gpiod_set_value_cansleep(ihid_elan->reset_gpio, 1); in elan_i2c_hid_power_down()
71 if (ihid_elan->chip_data->post_gpio_reset_off_delay_ms) in elan_i2c_hid_power_down()
72 msleep(ihid_elan->chip_data->post_gpio_reset_off_delay_ms); in elan_i2c_hid_power_down()
74 regulator_disable(ihid_elan->vccio); in elan_i2c_hid_power_down()
75 if (ihid_elan->vcc33) in elan_i2c_hid_power_down()
76 regulator_disable(ihid_elan->vcc33); in elan_i2c_hid_power_down()
83 ihid_elan = devm_kzalloc(&client->dev, sizeof(*ihid_elan), GFP_KERNEL); in i2c_hid_of_elan_probe()
85 return -ENOMEM; in i2c_hid_of_elan_probe()
87 ihid_elan->ops.power_up = elan_i2c_hid_power_up; in i2c_hid_of_elan_probe()
88 ihid_elan->ops.power_down = elan_i2c_hid_power_down; in i2c_hid_of_elan_probe()
91 ihid_elan->reset_gpio = in i2c_hid_of_elan_probe()
92 devm_gpiod_get_optional(&client->dev, "reset", GPIOD_OUT_HIGH); in i2c_hid_of_elan_probe()
93 if (IS_ERR(ihid_elan->reset_gpio)) in i2c_hid_of_elan_probe()
94 return PTR_ERR(ihid_elan->reset_gpio); in i2c_hid_of_elan_probe()
96 ihid_elan->vccio = devm_regulator_get(&client->dev, "vccio"); in i2c_hid_of_elan_probe()
97 if (IS_ERR(ihid_elan->vccio)) in i2c_hid_of_elan_probe()
98 return PTR_ERR(ihid_elan->vccio); in i2c_hid_of_elan_probe()
100 ihid_elan->chip_data = device_get_match_data(&client->dev); in i2c_hid_of_elan_probe()
102 if (ihid_elan->chip_data->main_supply_name) { in i2c_hid_of_elan_probe()
103 ihid_elan->vcc33 = devm_regulator_get(&client->dev, in i2c_hid_of_elan_probe()
104 ihid_elan->chip_data->main_supply_name); in i2c_hid_of_elan_probe()
105 if (IS_ERR(ihid_elan->vcc33)) in i2c_hid_of_elan_probe()
106 return PTR_ERR(ihid_elan->vcc33); in i2c_hid_of_elan_probe()
109 return i2c_hid_core_probe(client, &ihid_elan->ops, in i2c_hid_of_elan_probe()
110 ihid_elan->chip_data->hid_descriptor_address, 0); in i2c_hid_of_elan_probe()
162 MODULE_DESCRIPTION("Elan i2c-hid touchscreen driver");