Lines Matching +full:i +full:- +full:drive
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * qt2160.c - Atmel AT42QT2160 Touch Sense Controller
35 #define QT2160_CYCLE_INTERVAL 2000 /* msec - 2 sec */
73 struct qt2160_data *qt2160 = led->qt2160; in qt2160_led_set()
74 struct i2c_client *client = qt2160->client; in qt2160_led_set()
75 u32 drive, pwmen; in qt2160_led_set() local
77 if (value != led->brightness) { in qt2160_led_set()
78 drive = qt2160_read(client, QT2160_CMD_DRIVE_X); in qt2160_led_set()
81 drive |= BIT(led->id); in qt2160_led_set()
82 pwmen |= BIT(led->id); in qt2160_led_set()
85 drive &= ~BIT(led->id); in qt2160_led_set()
86 pwmen &= ~BIT(led->id); in qt2160_led_set()
88 qt2160_write(client, QT2160_CMD_DRIVE_X, drive); in qt2160_led_set()
98 led->brightness = value; in qt2160_led_set()
116 if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { in qt2160_read_block()
120 dev_err(&client->dev, in qt2160_read_block()
127 dev_err(&client->dev, in qt2160_read_block()
133 while (count--) { in qt2160_read_block()
138 dev_err(&client->dev, in qt2160_read_block()
145 dev_err(&client->dev, in qt2160_read_block()
160 struct i2c_client *client = qt2160->client; in qt2160_get_key_matrix()
163 int ret, i, mask; in qt2160_get_key_matrix() local
165 dev_dbg(&client->dev, "requesting keys...\n"); in qt2160_get_key_matrix()
173 dev_err(&client->dev, in qt2160_get_key_matrix()
178 old_matrix = qt2160->key_matrix; in qt2160_get_key_matrix()
179 qt2160->key_matrix = new_matrix = (regs[2] << 8) | regs[1]; in qt2160_get_key_matrix()
182 for (i = 0; i < 16; ++i, mask <<= 1) { in qt2160_get_key_matrix()
186 input_report_key(input, qt2160->keycodes[i], keyval); in qt2160_get_key_matrix()
187 dev_dbg(&client->dev, "key %d %s\n", in qt2160_get_key_matrix()
188 i, keyval ? "pressed" : "released"); in qt2160_get_key_matrix()
210 dev_err(&client->dev, in qt2160_read()
217 dev_err(&client->dev, in qt2160_read()
231 dev_err(&client->dev, in qt2160_write()
241 struct i2c_client *client = qt2160->client; in qt2160_register_leds()
243 int i; in qt2160_register_leds() local
245 for (i = 0; i < QT2160_NUM_LEDS_X; i++) { in qt2160_register_leds()
246 struct qt2160_led *led = &qt2160->leds[i]; in qt2160_register_leds()
248 snprintf(led->name, sizeof(led->name), "qt2160:x%d", i); in qt2160_register_leds()
249 led->cdev.name = led->name; in qt2160_register_leds()
250 led->cdev.brightness_set_blocking = qt2160_led_set; in qt2160_register_leds()
251 led->cdev.brightness = LED_OFF; in qt2160_register_leds()
252 led->id = i; in qt2160_register_leds()
253 led->qt2160 = qt2160; in qt2160_register_leds()
255 error = devm_led_classdev_register(&client->dev, &led->cdev); in qt2160_register_leds()
284 dev_err(&client->dev, "ID %d not supported\n", id); in qt2160_identify()
291 dev_err(&client->dev, "could not get firmware version\n"); in qt2160_identify()
298 dev_err(&client->dev, "could not get firmware revision\n"); in qt2160_identify()
302 dev_info(&client->dev, "AT42QT2160 firmware version %d.%d.%d\n", in qt2160_identify()
312 int i; in qt2160_probe() local
315 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE)) { in qt2160_probe()
316 dev_err(&client->dev, "%s adapter not supported\n", in qt2160_probe()
317 dev_driver_string(&client->adapter->dev)); in qt2160_probe()
318 return -ENODEV; in qt2160_probe()
322 return -ENODEV; in qt2160_probe()
325 qt2160 = devm_kzalloc(&client->dev, sizeof(*qt2160), GFP_KERNEL); in qt2160_probe()
327 return -ENOMEM; in qt2160_probe()
329 input = devm_input_allocate_device(&client->dev); in qt2160_probe()
331 return -ENOMEM; in qt2160_probe()
333 qt2160->client = client; in qt2160_probe()
334 qt2160->input = input; in qt2160_probe()
336 input->name = "AT42QT2160 Touch Sense Keyboard"; in qt2160_probe()
337 input->id.bustype = BUS_I2C; in qt2160_probe()
339 input->keycode = qt2160->keycodes; in qt2160_probe()
340 input->keycodesize = sizeof(qt2160->keycodes[0]); in qt2160_probe()
341 input->keycodemax = ARRAY_SIZE(qt2160_key2code); in qt2160_probe()
343 __set_bit(EV_KEY, input->evbit); in qt2160_probe()
344 __clear_bit(EV_REP, input->evbit); in qt2160_probe()
345 for (i = 0; i < ARRAY_SIZE(qt2160_key2code); i++) { in qt2160_probe()
346 qt2160->keycodes[i] = qt2160_key2code[i]; in qt2160_probe()
347 __set_bit(qt2160_key2code[i], input->keybit); in qt2160_probe()
349 __clear_bit(KEY_RESERVED, input->keybit); in qt2160_probe()
356 dev_err(&client->dev, "failed to calibrate device\n"); in qt2160_probe()
360 if (client->irq) { in qt2160_probe()
361 error = devm_request_threaded_irq(&client->dev, client->irq, in qt2160_probe()
366 dev_err(&client->dev, in qt2160_probe()
367 "failed to allocate irq %d\n", client->irq); in qt2160_probe()
373 dev_err(&client->dev, "Failed to setup polling\n"); in qt2160_probe()
381 dev_err(&client->dev, "Failed to register leds\n"); in qt2160_probe()
385 error = input_register_device(qt2160->input); in qt2160_probe()
387 dev_err(&client->dev, in qt2160_probe()