Lines Matching +full:off +full:- +full:axis

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Freescale MMA9551L Intelligent Motion-Sensing Platform driver
60 switch (chan->channel2) { in mma9551_read_incli_chan()
74 return -EINVAL; in mma9551_read_incli_chan()
95 *val = 90 * (quadrant + 1) - angle; in mma9551_read_incli_chan()
115 switch (chan->type) { in mma9551_read_raw()
117 mutex_lock(&data->mutex); in mma9551_read_raw()
118 ret = mma9551_read_incli_chan(data->client, chan, val); in mma9551_read_raw()
119 mutex_unlock(&data->mutex); in mma9551_read_raw()
122 return -EINVAL; in mma9551_read_raw()
125 switch (chan->type) { in mma9551_read_raw()
127 mutex_lock(&data->mutex); in mma9551_read_raw()
128 ret = mma9551_read_accel_chan(data->client, in mma9551_read_raw()
130 mutex_unlock(&data->mutex); in mma9551_read_raw()
133 return -EINVAL; in mma9551_read_raw()
136 switch (chan->type) { in mma9551_read_raw()
140 return -EINVAL; in mma9551_read_raw()
143 return -EINVAL; in mma9551_read_raw()
154 switch (chan->type) { in mma9551_read_event_config()
157 return data->event_enabled[chan->channel2 - 1]; in mma9551_read_event_config()
159 return -EINVAL; in mma9551_read_event_config()
164 enum iio_modifier axis, in mma9551_config_incli_event() argument
172 mma_axis = axis - 1; in mma9551_config_incli_event()
174 if (data->event_enabled[mma_axis] == state) in mma9551_config_incli_event()
178 ret = mma9551_gpio_config(data->client, in mma9551_config_incli_event()
184 ret = mma9551_set_power_state(data->client, false); in mma9551_config_incli_event()
191 switch (axis) { in mma9551_config_incli_event()
202 return -EINVAL; in mma9551_config_incli_event()
206 ret = mma9551_set_power_state(data->client, true); in mma9551_config_incli_event()
210 ret = mma9551_gpio_config(data->client, in mma9551_config_incli_event()
214 mma9551_set_power_state(data->client, false); in mma9551_config_incli_event()
219 data->event_enabled[mma_axis] = state; in mma9551_config_incli_event()
233 switch (chan->type) { in mma9551_write_event_config()
235 mutex_lock(&data->mutex); in mma9551_write_event_config()
237 chan->channel2, state); in mma9551_write_event_config()
238 mutex_unlock(&data->mutex); in mma9551_write_event_config()
241 return -EINVAL; in mma9551_write_event_config()
255 switch (chan->type) { in mma9551_write_event_value()
258 return -EINVAL; in mma9551_write_event_value()
259 mutex_lock(&data->mutex); in mma9551_write_event_value()
260 ret = mma9551_update_config_bits(data->client, in mma9551_write_event_value()
265 mutex_unlock(&data->mutex); in mma9551_write_event_value()
268 return -EINVAL; in mma9551_write_event_value()
283 switch (chan->type) { in mma9551_read_event_value()
285 mutex_lock(&data->mutex); in mma9551_read_event_value()
286 ret = mma9551_read_config_byte(data->client, in mma9551_read_event_value()
289 mutex_unlock(&data->mutex); in mma9551_read_event_value()
296 return -EINVAL; in mma9551_read_event_value()
307 #define MMA9551_INCLI_CHANNEL(axis) { \ argument
310 .channel2 = axis, \
338 int i, ret, mma_axis = -1; in mma9551_event_handler()
342 mutex_lock(&data->mutex); in mma9551_event_handler()
345 if (irq == data->irqs[i]) { in mma9551_event_handler()
350 if (mma_axis == -1) { in mma9551_event_handler()
352 dev_warn(&data->client->dev, in mma9551_event_handler()
353 "irq triggered on unused line %d\n", data->irqs[3]); in mma9551_event_handler()
373 ret = mma9551_read_status_byte(data->client, MMA9551_APPID_TILT, in mma9551_event_handler()
376 dev_err(&data->client->dev, in mma9551_event_handler()
387 mutex_unlock(&data->mutex); in mma9551_event_handler()
396 ret = mma9551_read_version(data->client); in mma9551_init()
400 return mma9551_set_device_state(data->client, true); in mma9551_init()
408 struct device *dev = &data->client->dev; in mma9551_gpio_probe()
421 data->irqs[i] = ret; in mma9551_gpio_probe()
422 ret = devm_request_threaded_irq(dev, data->irqs[i], in mma9551_gpio_probe()
427 dev_err(dev, "request irq %d failed\n", data->irqs[i]); in mma9551_gpio_probe()
432 desc_to_gpio(gpio), data->irqs[i]); in mma9551_gpio_probe()
442 id = acpi_match_device(dev->driver->acpi_match_table, dev); in mma9551_match_acpi_device()
457 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in mma9551_probe()
459 return -ENOMEM; in mma9551_probe()
463 data->client = client; in mma9551_probe()
466 name = id->name; in mma9551_probe()
467 else if (ACPI_HANDLE(&client->dev)) in mma9551_probe()
468 name = mma9551_match_acpi_device(&client->dev); in mma9551_probe()
474 mutex_init(&data->mutex); in mma9551_probe()
476 indio_dev->channels = mma9551_channels; in mma9551_probe()
477 indio_dev->num_channels = ARRAY_SIZE(mma9551_channels); in mma9551_probe()
478 indio_dev->name = name; in mma9551_probe()
479 indio_dev->modes = INDIO_DIRECT_MODE; in mma9551_probe()
480 indio_dev->info = &mma9551_info; in mma9551_probe()
486 ret = pm_runtime_set_active(&client->dev); in mma9551_probe()
490 pm_runtime_enable(&client->dev); in mma9551_probe()
491 pm_runtime_set_autosuspend_delay(&client->dev, in mma9551_probe()
493 pm_runtime_use_autosuspend(&client->dev); in mma9551_probe()
497 dev_err(&client->dev, "unable to register iio device\n"); in mma9551_probe()
504 pm_runtime_dont_use_autosuspend(&client->dev); in mma9551_probe()
505 pm_runtime_disable(&client->dev); in mma9551_probe()
519 pm_runtime_disable(&client->dev); in mma9551_remove()
520 pm_runtime_set_suspended(&client->dev); in mma9551_remove()
522 mutex_lock(&data->mutex); in mma9551_remove()
523 mma9551_set_device_state(data->client, false); in mma9551_remove()
524 mutex_unlock(&data->mutex); in mma9551_remove()
533 mutex_lock(&data->mutex); in mma9551_runtime_suspend()
534 ret = mma9551_set_device_state(data->client, false); in mma9551_runtime_suspend()
535 mutex_unlock(&data->mutex); in mma9551_runtime_suspend()
537 dev_err(&data->client->dev, "powering off device failed\n"); in mma9551_runtime_suspend()
538 return -EAGAIN; in mma9551_runtime_suspend()
550 ret = mma9551_set_device_state(data->client, true); in mma9551_runtime_resume()
565 mutex_lock(&data->mutex); in mma9551_suspend()
566 ret = mma9551_set_device_state(data->client, false); in mma9551_suspend()
567 mutex_unlock(&data->mutex); in mma9551_suspend()
578 mutex_lock(&data->mutex); in mma9551_resume()
579 ret = mma9551_set_device_state(data->client, true); in mma9551_resume()
580 mutex_unlock(&data->mutex); in mma9551_resume()
620 MODULE_DESCRIPTION("MMA9551L motion-sensing platform driver");