Lines Matching +full:adc +full:- +full:joystick

1 // SPDX-License-Identifier: GPL-2.0-or-later
8 * Oleh Kravchenko (Sparkfun Qwiic Joystick driver)
10 * Datasheet: https://cdn-learn.adafruit.com/downloads/pdf/gamepad-qt.pdf
15 * - Add interrupt support
23 #include <linux/input/sparse-keymap.h>
27 #define SEESAW_DEVICE_NAME "seesaw-gamepad"
91 .addr = client->addr, in seesaw_register_read()
92 .flags = client->flags, in seesaw_register_read()
97 .addr = client->addr, in seesaw_register_read()
98 .flags = client->flags | I2C_M_RD, in seesaw_register_read()
105 ret = i2c_transfer(client->adapter, message_buf, in seesaw_register_read()
155 data->button_state = ~be32_to_cpu(read_buf); in seesaw_read_data()
164 * ADC reads left as max and right as 0, must be reversed since kernel in seesaw_read_data()
167 data->x = SEESAW_JOYSTICK_MAX_AXIS - be16_to_cpu(adc_data); in seesaw_read_data()
176 data->y = be16_to_cpu(adc_data); in seesaw_read_data()
187 err = seesaw_read_data(private->i2c_client, &data); in seesaw_poll()
189 dev_err_ratelimited(&input->dev, in seesaw_poll()
190 "failed to read joystick state: %d\n", err); in seesaw_poll()
202 dev_err_ratelimited(&input->dev, in seesaw_poll()
222 seesaw = devm_kzalloc(&client->dev, sizeof(*seesaw), GFP_KERNEL); in seesaw_probe()
224 return -ENOMEM; in seesaw_probe()
231 dev_dbg(&client->dev, "Adafruit Seesaw Gamepad, Hardware ID: %02x\n", in seesaw_probe()
234 /* Set Pin Mode to input and enable pull-up resistors */ in seesaw_probe()
248 seesaw->i2c_client = client; in seesaw_probe()
249 seesaw->input_dev = devm_input_allocate_device(&client->dev); in seesaw_probe()
250 if (!seesaw->input_dev) in seesaw_probe()
251 return -ENOMEM; in seesaw_probe()
253 seesaw->input_dev->id.bustype = BUS_I2C; in seesaw_probe()
254 seesaw->input_dev->name = "Adafruit Seesaw Gamepad"; in seesaw_probe()
255 seesaw->input_dev->phys = "i2c/" SEESAW_DEVICE_NAME; in seesaw_probe()
256 input_set_drvdata(seesaw->input_dev, seesaw); in seesaw_probe()
257 input_set_abs_params(seesaw->input_dev, ABS_X, in seesaw_probe()
260 input_set_abs_params(seesaw->input_dev, ABS_Y, in seesaw_probe()
264 err = sparse_keymap_setup(seesaw->input_dev, seesaw_buttons_new, NULL); in seesaw_probe()
266 dev_err(&client->dev, in seesaw_probe()
271 err = input_setup_polling(seesaw->input_dev, seesaw_poll); in seesaw_probe()
273 dev_err(&client->dev, "failed to set up polling: %d\n", err); in seesaw_probe()
277 input_set_poll_interval(seesaw->input_dev, in seesaw_probe()
279 input_set_max_poll_interval(seesaw->input_dev, SEESAW_GAMEPAD_POLL_MAX); in seesaw_probe()
280 input_set_min_poll_interval(seesaw->input_dev, SEESAW_GAMEPAD_POLL_MIN); in seesaw_probe()
282 err = input_register_device(seesaw->input_dev); in seesaw_probe()
284 dev_err(&client->dev, "failed to register joystick: %d\n", err); in seesaw_probe()
298 { .compatible = "adafruit,seesaw-gamepad"},