Lines Matching refs:bma150
195 static int bma150_set_mode(struct bma150_data *bma150, u8 mode) in bma150_set_mode() argument
199 error = bma150_set_reg_bits(bma150->client, mode, BMA150_WAKE_UP_POS, in bma150_set_mode()
204 error = bma150_set_reg_bits(bma150->client, mode, BMA150_SLEEP_POS, in bma150_set_mode()
212 bma150->mode = mode; in bma150_set_mode()
216 static int bma150_soft_reset(struct bma150_data *bma150) in bma150_soft_reset() argument
220 error = bma150_set_reg_bits(bma150->client, 1, BMA150_SW_RES_POS, in bma150_soft_reset()
229 static int bma150_set_range(struct bma150_data *bma150, u8 range) in bma150_set_range() argument
231 return bma150_set_reg_bits(bma150->client, range, BMA150_RANGE_POS, in bma150_set_range()
235 static int bma150_set_bandwidth(struct bma150_data *bma150, u8 bw) in bma150_set_bandwidth() argument
237 return bma150_set_reg_bits(bma150->client, bw, BMA150_BANDWIDTH_POS, in bma150_set_bandwidth()
241 static int bma150_set_low_g_interrupt(struct bma150_data *bma150, in bma150_set_low_g_interrupt() argument
246 error = bma150_set_reg_bits(bma150->client, hyst, in bma150_set_low_g_interrupt()
252 error = bma150_write_byte(bma150->client, BMA150_LOW_G_DUR_REG, dur); in bma150_set_low_g_interrupt()
256 error = bma150_write_byte(bma150->client, BMA150_LOW_G_THRES_REG, thres); in bma150_set_low_g_interrupt()
260 return bma150_set_reg_bits(bma150->client, !!enable, in bma150_set_low_g_interrupt()
265 static int bma150_set_high_g_interrupt(struct bma150_data *bma150, in bma150_set_high_g_interrupt() argument
270 error = bma150_set_reg_bits(bma150->client, hyst, in bma150_set_high_g_interrupt()
276 error = bma150_write_byte(bma150->client, in bma150_set_high_g_interrupt()
281 error = bma150_write_byte(bma150->client, in bma150_set_high_g_interrupt()
286 return bma150_set_reg_bits(bma150->client, !!enable, in bma150_set_high_g_interrupt()
292 static int bma150_set_any_motion_interrupt(struct bma150_data *bma150, in bma150_set_any_motion_interrupt() argument
297 error = bma150_set_reg_bits(bma150->client, dur, in bma150_set_any_motion_interrupt()
304 error = bma150_write_byte(bma150->client, in bma150_set_any_motion_interrupt()
309 error = bma150_set_reg_bits(bma150->client, !!enable, in bma150_set_any_motion_interrupt()
315 return bma150_set_reg_bits(bma150->client, !!enable, in bma150_set_any_motion_interrupt()
321 static void bma150_report_xyz(struct bma150_data *bma150) in bma150_report_xyz() argument
327 ret = i2c_smbus_read_i2c_block_data(bma150->client, in bma150_report_xyz()
340 input_report_abs(bma150->input, ABS_X, x); in bma150_report_xyz()
341 input_report_abs(bma150->input, ABS_Y, y); in bma150_report_xyz()
342 input_report_abs(bma150->input, ABS_Z, z); in bma150_report_xyz()
343 input_sync(bma150->input); in bma150_report_xyz()
358 static int bma150_open(struct bma150_data *bma150) in bma150_open() argument
362 error = pm_runtime_get_sync(&bma150->client->dev); in bma150_open()
370 if (bma150->mode != BMA150_MODE_NORMAL) { in bma150_open()
371 error = bma150_set_mode(bma150, BMA150_MODE_NORMAL); in bma150_open()
379 static void bma150_close(struct bma150_data *bma150) in bma150_close() argument
381 pm_runtime_put_sync(&bma150->client->dev); in bma150_close()
383 if (bma150->mode != BMA150_MODE_SLEEP) in bma150_close()
384 bma150_set_mode(bma150, BMA150_MODE_SLEEP); in bma150_close()
389 struct bma150_data *bma150 = input_get_drvdata(input); in bma150_irq_open() local
391 return bma150_open(bma150); in bma150_irq_open()
396 struct bma150_data *bma150 = input_get_drvdata(input); in bma150_irq_close() local
398 bma150_close(bma150); in bma150_irq_close()
403 struct bma150_data *bma150 = ipoll_dev->private; in bma150_poll_open() local
405 bma150_open(bma150); in bma150_poll_open()
410 struct bma150_data *bma150 = ipoll_dev->private; in bma150_poll_close() local
412 bma150_close(bma150); in bma150_poll_close()
415 static int bma150_initialize(struct bma150_data *bma150, in bma150_initialize() argument
420 error = bma150_soft_reset(bma150); in bma150_initialize()
424 error = bma150_set_bandwidth(bma150, cfg->bandwidth); in bma150_initialize()
428 error = bma150_set_range(bma150, cfg->range); in bma150_initialize()
432 if (bma150->client->irq) { in bma150_initialize()
433 error = bma150_set_any_motion_interrupt(bma150, in bma150_initialize()
440 error = bma150_set_high_g_interrupt(bma150, in bma150_initialize()
446 error = bma150_set_low_g_interrupt(bma150, in bma150_initialize()
453 return bma150_set_mode(bma150, BMA150_MODE_SLEEP); in bma150_initialize()
456 static void bma150_init_input_device(struct bma150_data *bma150, in bma150_init_input_device() argument
462 idev->dev.parent = &bma150->client->dev; in bma150_init_input_device()
470 static int bma150_register_input_device(struct bma150_data *bma150) in bma150_register_input_device() argument
479 bma150_init_input_device(bma150, idev); in bma150_register_input_device()
483 input_set_drvdata(idev, bma150); in bma150_register_input_device()
491 bma150->input = idev; in bma150_register_input_device()
495 static int bma150_register_polled_device(struct bma150_data *bma150) in bma150_register_polled_device() argument
504 ipoll_dev->private = bma150; in bma150_register_polled_device()
512 bma150_init_input_device(bma150, ipoll_dev->input); in bma150_register_polled_device()
520 bma150->input_polled = ipoll_dev; in bma150_register_polled_device()
521 bma150->input = ipoll_dev->input; in bma150_register_polled_device()
532 struct bma150_data *bma150; in bma150_probe() local
547 bma150 = kzalloc(sizeof(struct bma150_data), GFP_KERNEL); in bma150_probe()
548 if (!bma150) in bma150_probe()
551 bma150->client = client; in bma150_probe()
568 error = bma150_initialize(bma150, cfg); in bma150_probe()
573 error = bma150_register_input_device(bma150); in bma150_probe()
580 BMA150_DRIVER, bma150); in bma150_probe()
585 input_unregister_device(bma150->input); in bma150_probe()
589 error = bma150_register_polled_device(bma150); in bma150_probe()
594 i2c_set_clientdata(client, bma150); in bma150_probe()
601 kfree(bma150); in bma150_probe()
607 struct bma150_data *bma150 = i2c_get_clientdata(client); in bma150_remove() local
612 free_irq(client->irq, bma150); in bma150_remove()
613 input_unregister_device(bma150->input); in bma150_remove()
615 input_unregister_polled_device(bma150->input_polled); in bma150_remove()
616 input_free_polled_device(bma150->input_polled); in bma150_remove()
619 kfree(bma150); in bma150_remove()
628 struct bma150_data *bma150 = i2c_get_clientdata(client); in bma150_suspend() local
630 return bma150_set_mode(bma150, BMA150_MODE_SLEEP); in bma150_suspend()
636 struct bma150_data *bma150 = i2c_get_clientdata(client); in bma150_resume() local
638 return bma150_set_mode(bma150, BMA150_MODE_NORMAL); in bma150_resume()