Lines Matching +full:no +full:- +full:motion
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Freescale MMA9551L Intelligent Motion-Sensing Platform driver
58 switch (chan->channel2) { in mma9551_read_incli_chan()
72 return -EINVAL; in mma9551_read_incli_chan()
93 *val = 90 * (quadrant + 1) - angle; in mma9551_read_incli_chan()
113 switch (chan->type) { in mma9551_read_raw()
115 mutex_lock(&data->mutex); in mma9551_read_raw()
116 ret = mma9551_read_incli_chan(data->client, chan, val); in mma9551_read_raw()
117 mutex_unlock(&data->mutex); in mma9551_read_raw()
120 return -EINVAL; in mma9551_read_raw()
123 switch (chan->type) { in mma9551_read_raw()
125 mutex_lock(&data->mutex); in mma9551_read_raw()
126 ret = mma9551_read_accel_chan(data->client, in mma9551_read_raw()
128 mutex_unlock(&data->mutex); in mma9551_read_raw()
131 return -EINVAL; in mma9551_read_raw()
134 switch (chan->type) { in mma9551_read_raw()
138 return -EINVAL; in mma9551_read_raw()
141 return -EINVAL; in mma9551_read_raw()
152 switch (chan->type) { in mma9551_read_event_config()
155 return data->event_enabled[chan->channel2 - 1]; in mma9551_read_event_config()
157 return -EINVAL; in mma9551_read_event_config()
170 mma_axis = axis - 1; in mma9551_config_incli_event()
172 if (data->event_enabled[mma_axis] == state) in mma9551_config_incli_event()
176 ret = mma9551_gpio_config(data->client, in mma9551_config_incli_event()
182 ret = mma9551_set_power_state(data->client, false); in mma9551_config_incli_event()
200 return -EINVAL; in mma9551_config_incli_event()
204 ret = mma9551_set_power_state(data->client, true); in mma9551_config_incli_event()
208 ret = mma9551_gpio_config(data->client, in mma9551_config_incli_event()
212 mma9551_set_power_state(data->client, false); in mma9551_config_incli_event()
217 data->event_enabled[mma_axis] = state; in mma9551_config_incli_event()
231 switch (chan->type) { in mma9551_write_event_config()
233 mutex_lock(&data->mutex); in mma9551_write_event_config()
235 chan->channel2, state); in mma9551_write_event_config()
236 mutex_unlock(&data->mutex); in mma9551_write_event_config()
239 return -EINVAL; in mma9551_write_event_config()
253 switch (chan->type) { in mma9551_write_event_value()
256 return -EINVAL; in mma9551_write_event_value()
257 mutex_lock(&data->mutex); in mma9551_write_event_value()
258 ret = mma9551_update_config_bits(data->client, in mma9551_write_event_value()
263 mutex_unlock(&data->mutex); in mma9551_write_event_value()
266 return -EINVAL; in mma9551_write_event_value()
281 switch (chan->type) { in mma9551_read_event_value()
283 mutex_lock(&data->mutex); in mma9551_read_event_value()
284 ret = mma9551_read_config_byte(data->client, in mma9551_read_event_value()
287 mutex_unlock(&data->mutex); in mma9551_read_event_value()
294 return -EINVAL; in mma9551_read_event_value()
336 int i, ret, mma_axis = -1; in mma9551_event_handler()
340 mutex_lock(&data->mutex); in mma9551_event_handler()
343 if (irq == data->irqs[i]) { in mma9551_event_handler()
348 if (mma_axis == -1) { in mma9551_event_handler()
350 dev_warn(&data->client->dev, in mma9551_event_handler()
351 "irq triggered on unused line %d\n", data->irqs[3]); in mma9551_event_handler()
371 ret = mma9551_read_status_byte(data->client, MMA9551_APPID_TILT, in mma9551_event_handler()
374 dev_err(&data->client->dev, in mma9551_event_handler()
385 mutex_unlock(&data->mutex); in mma9551_event_handler()
394 ret = mma9551_read_version(data->client); in mma9551_init()
398 return mma9551_set_device_state(data->client, true); in mma9551_init()
406 struct device *dev = &data->client->dev; in mma9551_gpio_probe()
419 data->irqs[i] = ret; in mma9551_gpio_probe()
420 ret = devm_request_threaded_irq(dev, data->irqs[i], in mma9551_gpio_probe()
425 dev_err(dev, "request irq %d failed\n", data->irqs[i]); in mma9551_gpio_probe()
429 dev_dbg(dev, "gpio resource, no:%d irq:%d\n", in mma9551_gpio_probe()
430 desc_to_gpio(gpio), data->irqs[i]); in mma9551_gpio_probe()
444 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in mma9551_probe()
446 return -ENOMEM; in mma9551_probe()
450 data->client = client; in mma9551_probe()
453 name = id->name; in mma9551_probe()
455 name = iio_get_acpi_device_name(&client->dev); in mma9551_probe()
461 mutex_init(&data->mutex); in mma9551_probe()
463 indio_dev->channels = mma9551_channels; in mma9551_probe()
464 indio_dev->num_channels = ARRAY_SIZE(mma9551_channels); in mma9551_probe()
465 indio_dev->name = name; in mma9551_probe()
466 indio_dev->modes = INDIO_DIRECT_MODE; in mma9551_probe()
467 indio_dev->info = &mma9551_info; in mma9551_probe()
473 ret = pm_runtime_set_active(&client->dev); in mma9551_probe()
477 pm_runtime_enable(&client->dev); in mma9551_probe()
478 pm_runtime_set_autosuspend_delay(&client->dev, in mma9551_probe()
480 pm_runtime_use_autosuspend(&client->dev); in mma9551_probe()
484 dev_err(&client->dev, "unable to register iio device\n"); in mma9551_probe()
491 pm_runtime_dont_use_autosuspend(&client->dev); in mma9551_probe()
492 pm_runtime_disable(&client->dev); in mma9551_probe()
506 pm_runtime_disable(&client->dev); in mma9551_remove()
507 pm_runtime_set_suspended(&client->dev); in mma9551_remove()
509 mutex_lock(&data->mutex); in mma9551_remove()
510 mma9551_set_device_state(data->client, false); in mma9551_remove()
511 mutex_unlock(&data->mutex); in mma9551_remove()
520 mutex_lock(&data->mutex); in mma9551_runtime_suspend()
521 ret = mma9551_set_device_state(data->client, false); in mma9551_runtime_suspend()
522 mutex_unlock(&data->mutex); in mma9551_runtime_suspend()
524 dev_err(&data->client->dev, "powering off device failed\n"); in mma9551_runtime_suspend()
525 return -EAGAIN; in mma9551_runtime_suspend()
537 ret = mma9551_set_device_state(data->client, true); in mma9551_runtime_resume()
552 mutex_lock(&data->mutex); in mma9551_suspend()
553 ret = mma9551_set_device_state(data->client, false); in mma9551_suspend()
554 mutex_unlock(&data->mutex); in mma9551_suspend()
565 mutex_lock(&data->mutex); in mma9551_resume()
566 ret = mma9551_set_device_state(data->client, true); in mma9551_resume()
567 mutex_unlock(&data->mutex); in mma9551_resume()
607 MODULE_DESCRIPTION("MMA9551L motion-sensing platform driver");