Lines Matching full:sensor

1 /* drivers/input/sensors/sensor-dev.c - handle all gsensor in this file
37 #include <linux/sensor-dev.h>
105 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_ACCEL]; in accel_calibration_show() local
107 if (sensor == NULL) in accel_calibration_show()
108 return sprintf(buf, "no accel sensor find\n"); in accel_calibration_show()
116 dev_err(&sensor->client->dev, "read accel sensor calibration data failed\n"); in accel_calibration_show()
131 static int accel_do_calibration(struct sensor_private_data *sensor) in accel_do_calibration() argument
138 mutex_lock(&sensor->operation_mutex); in accel_do_calibration()
140 ret = sensor->ops->report(sensor->client); in accel_do_calibration()
142 dev_err(&sensor->client->dev, "in %s read accel data error\n", __func__); in accel_do_calibration()
143 if (abs(sensor->axis.x) > ACCEL_OFFSET_MAX || in accel_do_calibration()
144 abs(sensor->axis.y) > ACCEL_OFFSET_MAX || in accel_do_calibration()
145 abs(abs(sensor->axis.z) - ACCEL_SENSITIVE) > ACCEL_OFFSET_MAX) { in accel_do_calibration()
152 sum_accel[0] += sensor->axis.x; in accel_do_calibration()
153 sum_accel[1] += sensor->axis.y; in accel_do_calibration()
154 sum_accel[2] += sensor->axis.z; in accel_do_calibration()
158 mutex_unlock(&sensor->operation_mutex); in accel_do_calibration()
161 dev_info(&sensor->client->dev, "%d times, read accel data is %d, %d, %d\n", in accel_do_calibration()
162 i, sensor->axis.x, sensor->axis.y, sensor->axis.z); in accel_do_calibration()
163 msleep(sensor->pdata->poll_delay_ms); in accel_do_calibration()
165 mutex_unlock(&sensor->operation_mutex); in accel_do_calibration()
176 dev_info(&sensor->client->dev, "accel offset is %d, %d, %d\n", sensor_cali_data.accel_offset[0], in accel_do_calibration()
185 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_ACCEL]; in accel_calibration_store() local
189 if (sensor == NULL) in accel_calibration_store()
194 dev_err(&sensor->client->dev, "%s: kstrtoint error return %d\n", __func__, ret); in accel_calibration_store()
198 dev_err(&sensor->client->dev, "%s: error value\n", __func__); in accel_calibration_store()
201 atomic_set(&sensor->is_factory, 1); in accel_calibration_store()
203 pre_status = sensor->status_cur; in accel_calibration_store()
205 mutex_lock(&sensor->operation_mutex); in accel_calibration_store()
206 sensor->ops->active(sensor->client, SENSOR_ON, sensor->pdata->poll_delay_ms); in accel_calibration_store()
207 mutex_unlock(&sensor->operation_mutex); in accel_calibration_store()
209 sensor->stop_work = 1; in accel_calibration_store()
210 if (sensor->pdata->irq_enable) in accel_calibration_store()
211 disable_irq_nosync(sensor->client->irq); in accel_calibration_store()
213 cancel_delayed_work_sync(&sensor->delaywork); in accel_calibration_store()
216 ret = accel_do_calibration(sensor); in accel_calibration_store()
218 dev_err(&sensor->client->dev, "accel do calibration failed\n"); in accel_calibration_store()
223 dev_err(&sensor->client->dev, "write accel sensor calibration data failed\n"); in accel_calibration_store()
227 sensor->stop_work = 0; in accel_calibration_store()
228 if (sensor->pdata->irq_enable) in accel_calibration_store()
229 enable_irq(sensor->client->irq); in accel_calibration_store()
231 schedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms)); in accel_calibration_store()
233 mutex_lock(&sensor->operation_mutex); in accel_calibration_store()
234 sensor->ops->active(sensor->client, SENSOR_OFF, sensor->pdata->poll_delay_ms); in accel_calibration_store()
235 mutex_unlock(&sensor->operation_mutex); in accel_calibration_store()
238 atomic_set(&sensor->is_factory, 0); in accel_calibration_store()
239 wake_up(&sensor->is_factory_ok); in accel_calibration_store()
250 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_GYROSCOPE]; in gyro_calibration_show() local
252 if (sensor == NULL) in gyro_calibration_show()
253 return sprintf(buf, "no gyro sensor find\n"); in gyro_calibration_show()
261 dev_err(&sensor->client->dev, "read gyro sensor calibration data failed\n"); in gyro_calibration_show()
273 static int gyro_do_calibration(struct sensor_private_data *sensor) in gyro_do_calibration() argument
279 mutex_lock(&sensor->operation_mutex); in gyro_do_calibration()
281 ret = sensor->ops->report(sensor->client); in gyro_do_calibration()
283 dev_err(&sensor->client->dev, "in %s read gyro data error\n", __func__); in gyro_do_calibration()
284 mutex_unlock(&sensor->operation_mutex); in gyro_do_calibration()
287 sum_gyro[0] += sensor->axis.x; in gyro_do_calibration()
288 sum_gyro[1] += sensor->axis.y; in gyro_do_calibration()
289 sum_gyro[2] += sensor->axis.z; in gyro_do_calibration()
290 dev_info(&sensor->client->dev, "%d times, read gyro data is %d, %d, %d\n", in gyro_do_calibration()
291 i, sensor->axis.x, sensor->axis.y, sensor->axis.z); in gyro_do_calibration()
292 msleep(sensor->pdata->poll_delay_ms); in gyro_do_calibration()
294 mutex_unlock(&sensor->operation_mutex); in gyro_do_calibration()
301 dev_info(&sensor->client->dev, "gyro offset is %d, %d, %d\n", sensor_cali_data.gyro_offset[0], in gyro_do_calibration()
310 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_GYROSCOPE]; in gyro_calibration_store() local
314 if (sensor == NULL) in gyro_calibration_store()
319 dev_err(&sensor->client->dev, "%s: kstrtoint error return %d\n", __func__, ret); in gyro_calibration_store()
323 dev_err(&sensor->client->dev, "%s error value\n", __func__); in gyro_calibration_store()
326 atomic_set(&sensor->is_factory, 1); in gyro_calibration_store()
328 pre_status = sensor->status_cur; in gyro_calibration_store()
330 mutex_lock(&sensor->operation_mutex); in gyro_calibration_store()
331 sensor->ops->active(sensor->client, SENSOR_ON, sensor->pdata->poll_delay_ms); in gyro_calibration_store()
332 mutex_unlock(&sensor->operation_mutex); in gyro_calibration_store()
334 sensor->stop_work = 1; in gyro_calibration_store()
335 if (sensor->pdata->irq_enable) in gyro_calibration_store()
336 disable_irq_nosync(sensor->client->irq); in gyro_calibration_store()
338 cancel_delayed_work_sync(&sensor->delaywork); in gyro_calibration_store()
341 ret = gyro_do_calibration(sensor); in gyro_calibration_store()
343 dev_err(&sensor->client->dev, "gyro do calibration failed\n"); in gyro_calibration_store()
349 dev_err(&sensor->client->dev, "write gyro sensor calibration data failed\n"); in gyro_calibration_store()
353 sensor->stop_work = 0; in gyro_calibration_store()
354 if (sensor->pdata->irq_enable) in gyro_calibration_store()
355 enable_irq(sensor->client->irq); in gyro_calibration_store()
357 schedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms)); in gyro_calibration_store()
359 mutex_lock(&sensor->operation_mutex); in gyro_calibration_store()
360 sensor->ops->active(sensor->client, SENSOR_OFF, sensor->pdata->poll_delay_ms); in gyro_calibration_store()
361 mutex_unlock(&sensor->operation_mutex); in gyro_calibration_store()
364 atomic_set(&sensor->is_factory, 0); in gyro_calibration_store()
365 wake_up(&sensor->is_factory_ok); in gyro_calibration_store()
394 struct sensor_private_data *sensor = (struct sensor_private_data *) i2c_get_clientdata(client); in sensor_get_id() local
396 char temp = sensor->ops->id_reg; in sensor_get_id()
399 if (sensor->ops->id_reg >= 0) { in sensor_get_id()
410 if (*value != sensor->ops->id_data) { in sensor_get_id()
411 dev_err(&client->dev, "%s:id=0x%x is not 0x%x\n", __func__, *value, sensor->ops->id_data); in sensor_get_id()
421 struct sensor_private_data *sensor = (struct sensor_private_data *) i2c_get_clientdata(client); in sensor_initial() local
425 result = sensor->ops->init(client); in sensor_initial()
427 dev_err(&client->dev, "%s:fail to init sensor\n", __func__); in sensor_initial()
436 struct sensor_private_data *sensor = (struct sensor_private_data *) i2c_get_clientdata(client); in sensor_chip_init() local
437 struct sensor_operate *ops = sensor_ops[(int)sensor->i2c_id->driver_data]; in sensor_chip_init()
441 sensor->ops = ops; in sensor_chip_init()
443 dev_err(&client->dev, "%s:ops is null,sensor name is %s\n", __func__, sensor->i2c_id->name); in sensor_chip_init()
448 if ((sensor->type != ops->type) || ((int)sensor->i2c_id->driver_data != ops->id_i2c)) { in sensor_chip_init()
449 …type or id is different:type=%d,%d,id=%d,%d\n", __func__, sensor->type, ops->type, (int)sensor->i2… in sensor_chip_init()
460 result = sensor_get_id(sensor->client, &sensor->devid); in sensor_chip_init()
462 …dev_err(&client->dev, "%s:fail to read %s devid:0x%x\n", __func__, sensor->i2c_id->name, sensor->d… in sensor_chip_init()
467 …&client->dev, "%s:%s:devid=0x%x,ops=0x%p\n", __func__, sensor->i2c_id->name, sensor->devid, sensor in sensor_chip_init()
469 result = sensor_initial(sensor->client); in sensor_chip_init()
471 dev_err(&client->dev, "%s:fail to init sensor\n", __func__); in sensor_chip_init()
483 struct sensor_private_data *sensor = (struct sensor_private_data *) i2c_get_clientdata(client); in sensor_reset_rate() local
491 dev_info(&client->dev, "set sensor poll time to %dms\n", rate); in sensor_reset_rate()
494 if (sensor->pdata->poll_delay_ms == (rate - 4)) in sensor_reset_rate()
497 sensor->pdata->poll_delay_ms = rate - 4; in sensor_reset_rate()
499 if (sensor->status_cur == SENSOR_ON) { in sensor_reset_rate()
500 if (!sensor->pdata->irq_enable) { in sensor_reset_rate()
501 sensor->stop_work = 1; in sensor_reset_rate()
502 cancel_delayed_work_sync(&sensor->delaywork); in sensor_reset_rate()
504 sensor->ops->active(client, SENSOR_OFF, rate); in sensor_reset_rate()
505 result = sensor->ops->active(client, SENSOR_ON, rate); in sensor_reset_rate()
506 if (!sensor->pdata->irq_enable) { in sensor_reset_rate()
507 sensor->stop_work = 0; in sensor_reset_rate()
508 schedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms)); in sensor_reset_rate()
518 …struct sensor_private_data *sensor = container_of(delaywork, struct sensor_private_data, delaywork… in sensor_delaywork_func() local
519 struct i2c_client *client = sensor->client; in sensor_delaywork_func()
522 mutex_lock(&sensor->sensor_mutex); in sensor_delaywork_func()
523 result = sensor->ops->report(client); in sensor_delaywork_func()
526 mutex_unlock(&sensor->sensor_mutex); in sensor_delaywork_func()
528 if ((!sensor->pdata->irq_enable) && (sensor->stop_work == 0)) in sensor_delaywork_func()
529 schedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms)); in sensor_delaywork_func()
543 struct sensor_private_data *sensor = in sensor_interrupt() local
545 struct i2c_client *client = sensor->client; in sensor_interrupt()
547 mutex_lock(&sensor->sensor_mutex); in sensor_interrupt()
548 if (sensor->ops->report(client) < 0) in sensor_interrupt()
550 mutex_unlock(&sensor->sensor_mutex); in sensor_interrupt()
557 struct sensor_private_data *sensor = in sensor_irq_init() local
562 if ((sensor->pdata->irq_enable) && (sensor->pdata->irq_flags != SENSOR_UNKNOW_DATA)) { in sensor_irq_init()
563 if (sensor->pdata->poll_delay_ms <= 0) in sensor_irq_init()
564 sensor->pdata->poll_delay_ms = 30; in sensor_irq_init()
565 result = gpio_request(client->irq, sensor->i2c_id->name); in sensor_irq_init()
570 …&client->dev, irq, NULL, sensor_interrupt, sensor->pdata->irq_flags | IRQF_ONESHOT, sensor->ops->n… in sensor_irq_init()
580 } else if (!sensor->pdata->irq_enable) { in sensor_irq_init()
581 INIT_DELAYED_WORK(&sensor->delaywork, sensor_delaywork_func); in sensor_irq_init()
582 sensor->stop_work = 1; in sensor_irq_init()
583 if (sensor->pdata->poll_delay_ms <= 0) in sensor_irq_init()
584 sensor->pdata->poll_delay_ms = 30; in sensor_irq_init()
586 dev_info(&client->dev, "%s:use polling,delay=%d ms\n", __func__, sensor->pdata->poll_delay_ms); in sensor_irq_init()
596 struct sensor_private_data *sensor = in sensor_shutdown() local
599 if ((sensor->ops->suspend) && (sensor->ops->resume)) in sensor_shutdown()
600 unregister_early_suspend(&sensor->early_suspend); in sensor_shutdown()
608 struct sensor_private_data *sensor = in sensor_suspend() local
611 if (sensor->ops->suspend) in sensor_suspend()
612 sensor->ops->suspend(sensor->client); in sensor_suspend()
617 struct sensor_private_data *sensor = in sensor_resume() local
620 if (sensor->ops->resume) in sensor_resume()
621 sensor->ops->resume(sensor->client); in sensor_resume()
628 struct sensor_private_data *sensor = dev_get_drvdata(dev); in sensor_of_suspend() local
630 if (sensor->ops->suspend) in sensor_of_suspend()
631 sensor->ops->suspend(sensor->client); in sensor_of_suspend()
638 struct sensor_private_data *sensor = dev_get_drvdata(dev); in sensor_of_resume() local
640 if (sensor->ops->resume) in sensor_of_resume()
641 sensor->ops->resume(sensor->client); in sensor_of_resume()
642 if (sensor->pdata->power_off_in_suspend) in sensor_of_resume()
643 sensor_initial(sensor->client); in sensor_of_resume()
668 static int sensor_enable(struct sensor_private_data *sensor, int enable) in sensor_enable() argument
671 struct i2c_client *client = sensor->client; in sensor_enable()
674 result = sensor->ops->active(client, 1, sensor->pdata->poll_delay_ms); in sensor_enable()
676 dev_err(&client->dev, "%s:fail to active sensor,ret=%d\n", __func__, result); in sensor_enable()
679 sensor->status_cur = SENSOR_ON; in sensor_enable()
680 sensor->stop_work = 0; in sensor_enable()
681 if (sensor->pdata->irq_enable) in sensor_enable()
684 schedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms)); in sensor_enable()
685 …dev_info(&client->dev, "sensor on: starting poll sensor data %dms\n", sensor->pdata->poll_delay_ms… in sensor_enable()
687 sensor->stop_work = 1; in sensor_enable()
688 if (sensor->pdata->irq_enable) in sensor_enable()
691 cancel_delayed_work_sync(&sensor->delaywork); in sensor_enable()
692 result = sensor->ops->active(client, 0, sensor->pdata->poll_delay_ms); in sensor_enable()
694 dev_err(&client->dev, "%s:fail to disable sensor,ret=%d\n", __func__, result); in sensor_enable()
697 sensor->status_cur = SENSOR_OFF; in sensor_enable()
707 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_ANGLE]; in angle_dev_ioctl() local
708 struct i2c_client *client = sensor->client; in angle_dev_ioctl()
727 mutex_lock(&sensor->operation_mutex); in angle_dev_ioctl()
728 if (++sensor->start_count == 1) { in angle_dev_ioctl()
729 if (sensor->status_cur == SENSOR_OFF) { in angle_dev_ioctl()
730 sensor_enable(sensor, SENSOR_ON); in angle_dev_ioctl()
733 mutex_unlock(&sensor->operation_mutex); in angle_dev_ioctl()
737 mutex_lock(&sensor->operation_mutex); in angle_dev_ioctl()
738 if (--sensor->start_count == 0) { in angle_dev_ioctl()
739 if (sensor->status_cur == SENSOR_ON) { in angle_dev_ioctl()
740 sensor_enable(sensor, SENSOR_OFF); in angle_dev_ioctl()
743 mutex_unlock(&sensor->operation_mutex); in angle_dev_ioctl()
747 mutex_lock(&sensor->operation_mutex); in angle_dev_ioctl()
750 mutex_unlock(&sensor->operation_mutex); in angle_dev_ioctl()
753 mutex_unlock(&sensor->operation_mutex); in angle_dev_ioctl()
757 mutex_lock(&sensor->data_mutex); in angle_dev_ioctl()
758 memcpy(&axis, &sensor->axis, sizeof(sensor->axis)); in angle_dev_ioctl()
759 mutex_unlock(&sensor->data_mutex); in angle_dev_ioctl()
799 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_ACCEL]; in gsensor_dev_ioctl() local
800 struct i2c_client *client = sensor->client; in gsensor_dev_ioctl()
806 wait_event_interruptible(sensor->is_factory_ok, (atomic_read(&sensor->is_factory) == 0)); in gsensor_dev_ioctl()
821 mutex_lock(&sensor->operation_mutex); in gsensor_dev_ioctl()
822 if (++sensor->start_count == 1) { in gsensor_dev_ioctl()
823 if (sensor->status_cur == SENSOR_OFF) { in gsensor_dev_ioctl()
824 sensor_enable(sensor, SENSOR_ON); in gsensor_dev_ioctl()
827 mutex_unlock(&sensor->operation_mutex); in gsensor_dev_ioctl()
831 mutex_lock(&sensor->operation_mutex); in gsensor_dev_ioctl()
832 if (--sensor->start_count == 0) { in gsensor_dev_ioctl()
833 if (sensor->status_cur == SENSOR_ON) { in gsensor_dev_ioctl()
834 sensor_enable(sensor, SENSOR_OFF); in gsensor_dev_ioctl()
837 mutex_unlock(&sensor->operation_mutex); in gsensor_dev_ioctl()
841 mutex_lock(&sensor->operation_mutex); in gsensor_dev_ioctl()
844 mutex_unlock(&sensor->operation_mutex); in gsensor_dev_ioctl()
847 mutex_unlock(&sensor->operation_mutex); in gsensor_dev_ioctl()
851 mutex_lock(&sensor->data_mutex); in gsensor_dev_ioctl()
852 memcpy(&axis, &sensor->axis, sizeof(sensor->axis)); in gsensor_dev_ioctl()
853 mutex_unlock(&sensor->data_mutex); in gsensor_dev_ioctl()
896 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_COMPASS]; in compass_dev_open() local
899 flag = atomic_read(&sensor->flags.open_flag); in compass_dev_open()
901 atomic_set(&sensor->flags.open_flag, 1); in compass_dev_open()
902 wake_up(&sensor->flags.open_wq); in compass_dev_open()
910 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_COMPASS]; in compass_dev_release() local
913 flag = atomic_read(&sensor->flags.open_flag); in compass_dev_release()
915 atomic_set(&sensor->flags.open_flag, 0); in compass_dev_release()
916 wake_up(&sensor->flags.open_wq); in compass_dev_release()
979 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_COMPASS]; in compass_dev_ioctl() local
980 struct i2c_client *client = sensor->client; in compass_dev_ioctl()
1004 atomic_set(&sensor->flags.m_flag, flag); in compass_dev_ioctl()
1007 flag = atomic_read(&sensor->flags.m_flag); in compass_dev_ioctl()
1010 atomic_set(&sensor->flags.a_flag, flag); in compass_dev_ioctl()
1013 flag = atomic_read(&sensor->flags.a_flag); in compass_dev_ioctl()
1016 atomic_set(&sensor->flags.mv_flag, flag); in compass_dev_ioctl()
1019 flag = atomic_read(&sensor->flags.mv_flag); in compass_dev_ioctl()
1022 sensor->flags.delay = flag; in compass_dev_ioctl()
1023 mutex_lock(&sensor->operation_mutex); in compass_dev_ioctl()
1026 mutex_unlock(&sensor->operation_mutex); in compass_dev_ioctl()
1029 mutex_unlock(&sensor->operation_mutex); in compass_dev_ioctl()
1032 flag = sensor->flags.delay; in compass_dev_ioctl()
1068 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_GYROSCOPE]; in gyro_dev_ioctl() local
1069 struct i2c_client *client = sensor->client; in gyro_dev_ioctl()
1074 wait_event_interruptible(sensor->is_factory_ok, (atomic_read(&sensor->is_factory) == 0)); in gyro_dev_ioctl()
1078 result = !sensor->status_cur; in gyro_dev_ioctl()
1086 dev_err(&client->dev, "%s:failed to copy gyro sensor status from user space.\n", __func__); in gyro_dev_ioctl()
1089 mutex_lock(&sensor->operation_mutex); in gyro_dev_ioctl()
1091 if (sensor->status_cur == SENSOR_OFF) in gyro_dev_ioctl()
1092 sensor_enable(sensor, SENSOR_ON); in gyro_dev_ioctl()
1094 if (sensor->status_cur == SENSOR_ON) in gyro_dev_ioctl()
1095 sensor_enable(sensor, SENSOR_OFF); in gyro_dev_ioctl()
1097 result = sensor->status_cur; in gyro_dev_ioctl()
1099 mutex_unlock(&sensor->operation_mutex); in gyro_dev_ioctl()
1103 mutex_unlock(&sensor->operation_mutex); in gyro_dev_ioctl()
1110 mutex_lock(&sensor->operation_mutex); in gyro_dev_ioctl()
1114 mutex_unlock(&sensor->operation_mutex); in gyro_dev_ioctl()
1117 mutex_unlock(&sensor->operation_mutex); in gyro_dev_ioctl()
1189 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_LIGHT]; in light_dev_ioctl() local
1190 struct i2c_client *client = sensor->client; in light_dev_ioctl()
1198 dev_err(&client->dev, "%s:failed to copy light sensor rate from user space.\n", __func__); in light_dev_ioctl()
1201 mutex_lock(&sensor->operation_mutex); in light_dev_ioctl()
1204 mutex_unlock(&sensor->operation_mutex); in light_dev_ioctl()
1207 mutex_unlock(&sensor->operation_mutex); in light_dev_ioctl()
1210 result = sensor->status_cur; in light_dev_ioctl()
1212 dev_err(&client->dev, "%s:failed to copy light sensor status to user space.\n", __func__); in light_dev_ioctl()
1218 dev_err(&client->dev, "%s:failed to copy light sensor status from user space.\n", __func__); in light_dev_ioctl()
1222 mutex_lock(&sensor->operation_mutex); in light_dev_ioctl()
1224 if (sensor->status_cur == SENSOR_OFF) in light_dev_ioctl()
1225 sensor_enable(sensor, SENSOR_ON); in light_dev_ioctl()
1227 if (sensor->status_cur == SENSOR_ON) in light_dev_ioctl()
1228 sensor_enable(sensor, SENSOR_OFF); in light_dev_ioctl()
1230 mutex_unlock(&sensor->operation_mutex); in light_dev_ioctl()
1283 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_PROXIMITY]; in proximity_dev_ioctl() local
1289 result = sensor->status_cur; in proximity_dev_ioctl()
1291 dev_err(&sensor->client->dev, "%s:failed to copy psensor status to user space.\n", __func__); in proximity_dev_ioctl()
1297 dev_err(&sensor->client->dev, "%s:failed to copy psensor status from user space.\n", __func__); in proximity_dev_ioctl()
1300 mutex_lock(&sensor->operation_mutex); in proximity_dev_ioctl()
1302 if (sensor->status_cur == SENSOR_OFF) in proximity_dev_ioctl()
1303 sensor_enable(sensor, SENSOR_ON); in proximity_dev_ioctl()
1305 if (sensor->status_cur == SENSOR_ON) in proximity_dev_ioctl()
1306 sensor_enable(sensor, SENSOR_OFF); in proximity_dev_ioctl()
1308 mutex_unlock(&sensor->operation_mutex); in proximity_dev_ioctl()
1332 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_TEMPERATURE]; in temperature_dev_ioctl() local
1338 result = sensor->status_cur; in temperature_dev_ioctl()
1340 …dev_err(&sensor->client->dev, "%s:failed to copy temperature sensor status to user space.\n", __fu… in temperature_dev_ioctl()
1346 …dev_err(&sensor->client->dev, "%s:failed to copy temperature sensor status from user space.\n", __… in temperature_dev_ioctl()
1349 mutex_lock(&sensor->operation_mutex); in temperature_dev_ioctl()
1351 if (sensor->status_cur == SENSOR_OFF) in temperature_dev_ioctl()
1352 sensor_enable(sensor, SENSOR_ON); in temperature_dev_ioctl()
1354 if (sensor->status_cur == SENSOR_ON) in temperature_dev_ioctl()
1355 sensor_enable(sensor, SENSOR_OFF); in temperature_dev_ioctl()
1357 mutex_unlock(&sensor->operation_mutex); in temperature_dev_ioctl()
1384 struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_PRESSURE]; in pressure_dev_ioctl() local
1390 result = sensor->status_cur; in pressure_dev_ioctl()
1392 …dev_err(&sensor->client->dev, "%s:failed to copy pressure sensor status to user space.\n", __func_… in pressure_dev_ioctl()
1398 …dev_err(&sensor->client->dev, "%s:failed to copy pressure sensor status from user space.\n", __fun… in pressure_dev_ioctl()
1401 mutex_lock(&sensor->operation_mutex); in pressure_dev_ioctl()
1403 if (sensor->status_cur == SENSOR_OFF) in pressure_dev_ioctl()
1404 sensor_enable(sensor, SENSOR_ON); in pressure_dev_ioctl()
1406 if (sensor->status_cur == SENSOR_ON) in pressure_dev_ioctl()
1407 sensor_enable(sensor, SENSOR_OFF); in pressure_dev_ioctl()
1409 mutex_unlock(&sensor->operation_mutex); in pressure_dev_ioctl()
1419 static int sensor_misc_device_register(struct sensor_private_data *sensor, int type) in sensor_misc_device_register() argument
1425 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1426 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1427 sensor->fops.unlocked_ioctl = angle_dev_ioctl; in sensor_misc_device_register()
1428 sensor->fops.open = angle_dev_open; in sensor_misc_device_register()
1429 sensor->fops.release = angle_dev_release; in sensor_misc_device_register()
1431 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1432 sensor->miscdev.name = "angle"; in sensor_misc_device_register()
1433 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1435 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1440 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1441 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1442 sensor->fops.unlocked_ioctl = gsensor_dev_ioctl; in sensor_misc_device_register()
1444 sensor->fops.compat_ioctl = gsensor_dev_ioctl; in sensor_misc_device_register()
1446 sensor->fops.open = gsensor_dev_open; in sensor_misc_device_register()
1447 sensor->fops.release = gsensor_dev_release; in sensor_misc_device_register()
1449 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1450 sensor->miscdev.name = "mma8452_daemon"; in sensor_misc_device_register()
1451 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1453 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1458 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1459 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1460 sensor->fops.unlocked_ioctl = compass_dev_ioctl; in sensor_misc_device_register()
1462 sensor->fops.compat_ioctl = compass_dev_compat_ioctl; in sensor_misc_device_register()
1464 sensor->fops.open = compass_dev_open; in sensor_misc_device_register()
1465 sensor->fops.release = compass_dev_release; in sensor_misc_device_register()
1467 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1468 sensor->miscdev.name = "compass"; in sensor_misc_device_register()
1469 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1471 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1476 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1477 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1478 sensor->fops.unlocked_ioctl = gyro_dev_ioctl; in sensor_misc_device_register()
1479 sensor->fops.open = gyro_dev_open; in sensor_misc_device_register()
1480 sensor->fops.release = gyro_dev_release; in sensor_misc_device_register()
1482 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1483 sensor->miscdev.name = "gyrosensor"; in sensor_misc_device_register()
1484 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1486 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1491 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1492 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1493 sensor->fops.unlocked_ioctl = light_dev_ioctl; in sensor_misc_device_register()
1495 sensor->fops.compat_ioctl = light_dev_compat_ioctl; in sensor_misc_device_register()
1497 sensor->fops.open = light_dev_open; in sensor_misc_device_register()
1498 sensor->fops.release = light_dev_release; in sensor_misc_device_register()
1500 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1501 sensor->miscdev.name = "lightsensor"; in sensor_misc_device_register()
1502 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1504 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1509 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1510 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1511 sensor->fops.unlocked_ioctl = proximity_dev_ioctl; in sensor_misc_device_register()
1513 sensor->fops.compat_ioctl = proximity_dev_compat_ioctl; in sensor_misc_device_register()
1515 sensor->fops.open = proximity_dev_open; in sensor_misc_device_register()
1516 sensor->fops.release = proximity_dev_release; in sensor_misc_device_register()
1518 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1519 sensor->miscdev.name = "psensor"; in sensor_misc_device_register()
1520 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1522 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1527 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1528 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1529 sensor->fops.unlocked_ioctl = temperature_dev_ioctl; in sensor_misc_device_register()
1530 sensor->fops.open = temperature_dev_open; in sensor_misc_device_register()
1531 sensor->fops.release = temperature_dev_release; in sensor_misc_device_register()
1533 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1534 sensor->miscdev.name = "temperature"; in sensor_misc_device_register()
1535 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1537 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1542 if (!sensor->ops->misc_dev) { in sensor_misc_device_register()
1543 sensor->fops.owner = THIS_MODULE; in sensor_misc_device_register()
1544 sensor->fops.unlocked_ioctl = pressure_dev_ioctl; in sensor_misc_device_register()
1545 sensor->fops.open = pressure_dev_open; in sensor_misc_device_register()
1546 sensor->fops.release = pressure_dev_release; in sensor_misc_device_register()
1548 sensor->miscdev.minor = MISC_DYNAMIC_MINOR; in sensor_misc_device_register()
1549 sensor->miscdev.name = "pressure"; in sensor_misc_device_register()
1550 sensor->miscdev.fops = &sensor->fops; in sensor_misc_device_register()
1552 memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev)); in sensor_misc_device_register()
1557 dev_err(&sensor->client->dev, "%s:unknow sensor type=%d\n", __func__, type); in sensor_misc_device_register()
1562 sensor->miscdev.parent = &sensor->client->dev; in sensor_misc_device_register()
1563 result = misc_register(&sensor->miscdev); in sensor_misc_device_register()
1565 dev_err(&sensor->client->dev, in sensor_misc_device_register()
1566 "fail to register misc device %s\n", sensor->miscdev.name); in sensor_misc_device_register()
1569 dev_info(&sensor->client->dev, "%s:miscdevice: %s\n", __func__, sensor->miscdev.name); in sensor_misc_device_register()
1577 struct sensor_private_data *sensor; in sensor_probe() local
1601 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); in sensor_probe()
1602 if (!sensor) { in sensor_probe()
1777 dev_err(&client->adapter->dev, "sensor type is error %d\n", type); in sensor_probe()
1782 dev_err(&client->adapter->dev, "sensor id is error %d\n", (int)devid->driver_data); in sensor_probe()
1786 i2c_set_clientdata(client, sensor); in sensor_probe()
1787 sensor->client = client; in sensor_probe()
1788 sensor->pdata = pdata; in sensor_probe()
1789 sensor->type = type; in sensor_probe()
1790 sensor->i2c_id = (struct i2c_device_id *)devid; in sensor_probe()
1792 memset(&(sensor->axis), 0, sizeof(struct sensor_axis)); in sensor_probe()
1793 mutex_init(&sensor->data_mutex); in sensor_probe()
1794 mutex_init(&sensor->operation_mutex); in sensor_probe()
1795 mutex_init(&sensor->sensor_mutex); in sensor_probe()
1796 mutex_init(&sensor->i2c_mutex); in sensor_probe()
1798 atomic_set(&sensor->is_factory, 0); in sensor_probe()
1799 init_waitqueue_head(&sensor->is_factory_ok); in sensor_probe()
1802 atomic_set(&sensor->flags.m_flag, 1); in sensor_probe()
1803 atomic_set(&sensor->flags.a_flag, 1); in sensor_probe()
1804 atomic_set(&sensor->flags.mv_flag, 1); in sensor_probe()
1805 atomic_set(&sensor->flags.open_flag, 0); in sensor_probe()
1806 atomic_set(&sensor->flags.debug_flag, 1); in sensor_probe()
1807 init_waitqueue_head(&sensor->flags.open_wq); in sensor_probe()
1808 sensor->flags.delay = 100; in sensor_probe()
1810 sensor->status_cur = SENSOR_OFF; in sensor_probe()
1811 sensor->axis.x = 0; in sensor_probe()
1812 sensor->axis.y = 0; in sensor_probe()
1813 sensor->axis.z = 0; in sensor_probe()
1815 result = sensor_chip_init(sensor->client); in sensor_probe()
1818 sensor_probe_times[sensor->ops->id_i2c]++; in sensor_probe()
1819 if (sensor_probe_times[sensor->ops->id_i2c] < 3) in sensor_probe()
1825 sensor->input_dev = devm_input_allocate_device(&client->dev); in sensor_probe()
1826 if (!sensor->input_dev) { in sensor_probe()
1835 sensor->input_dev->name = "angle"; in sensor_probe()
1836 set_bit(EV_ABS, sensor->input_dev->evbit); in sensor_probe()
1838 …input_set_abs_params(sensor->input_dev, ABS_X, sensor->ops->range[0], sensor->ops->range[1], 0, 0); in sensor_probe()
1840 …input_set_abs_params(sensor->input_dev, ABS_Y, sensor->ops->range[0], sensor->ops->range[1], 0, 0); in sensor_probe()
1842 …input_set_abs_params(sensor->input_dev, ABS_Z, sensor->ops->range[0], sensor->ops->range[1], 0, 0); in sensor_probe()
1845 sensor->input_dev->name = "gsensor"; in sensor_probe()
1846 set_bit(EV_ABS, sensor->input_dev->evbit); in sensor_probe()
1848 …input_set_abs_params(sensor->input_dev, ABS_X, sensor->ops->range[0], sensor->ops->range[1], 0, 0); in sensor_probe()
1850 …input_set_abs_params(sensor->input_dev, ABS_Y, sensor->ops->range[0], sensor->ops->range[1], 0, 0); in sensor_probe()
1852 …input_set_abs_params(sensor->input_dev, ABS_Z, sensor->ops->range[0], sensor->ops->range[1], 0, 0); in sensor_probe()
1855 sensor->input_dev->name = "compass"; in sensor_probe()
1857 set_bit(EV_ABS, sensor->input_dev->evbit); in sensor_probe()
1859 input_set_abs_params(sensor->input_dev, ABS_RX, 0, 23040, 0, 0); in sensor_probe()
1861 input_set_abs_params(sensor->input_dev, ABS_RY, -11520, 11520, 0, 0); in sensor_probe()
1863 input_set_abs_params(sensor->input_dev, ABS_RZ, -5760, 5760, 0, 0); in sensor_probe()
1865 input_set_abs_params(sensor->input_dev, ABS_X, -5760, 5760, 0, 0); in sensor_probe()
1867 input_set_abs_params(sensor->input_dev, ABS_Y, -5760, 5760, 0, 0); in sensor_probe()
1869 input_set_abs_params(sensor->input_dev, ABS_Z, -5760, 5760, 0, 0); in sensor_probe()
1870 /* status of magnetic sensor */ in sensor_probe()
1871 input_set_abs_params(sensor->input_dev, ABS_RUDDER, -32768, 3, 0, 0); in sensor_probe()
1872 /* status of acceleration sensor */ in sensor_probe()
1873 input_set_abs_params(sensor->input_dev, ABS_WHEEL, -32768, 3, 0, 0); in sensor_probe()
1875 input_set_abs_params(sensor->input_dev, ABS_HAT0X, -20480, 20479, 0, 0); in sensor_probe()
1877 input_set_abs_params(sensor->input_dev, ABS_HAT0Y, -20480, 20479, 0, 0); in sensor_probe()
1879 input_set_abs_params(sensor->input_dev, ABS_BRAKE, -20480, 20479, 0, 0); in sensor_probe()
1882 sensor->input_dev->name = "gyro"; in sensor_probe()
1884 input_set_capability(sensor->input_dev, EV_REL, REL_RX); in sensor_probe()
1885 …input_set_abs_params(sensor->input_dev, ABS_RX, sensor->ops->range[0], sensor->ops->range[1], 0, 0… in sensor_probe()
1887 input_set_capability(sensor->input_dev, EV_REL, REL_RY); in sensor_probe()
1888 …input_set_abs_params(sensor->input_dev, ABS_RY, sensor->ops->range[0], sensor->ops->range[1], 0, 0… in sensor_probe()
1890 input_set_capability(sensor->input_dev, EV_REL, REL_RZ); in sensor_probe()
1891 …input_set_abs_params(sensor->input_dev, ABS_RZ, sensor->ops->range[0], sensor->ops->range[1], 0, 0… in sensor_probe()
1894 sensor->input_dev->name = "lightsensor-level"; in sensor_probe()
1895 set_bit(EV_ABS, sensor->input_dev->evbit); in sensor_probe()
1896 …input_set_abs_params(sensor->input_dev, ABS_MISC, sensor->ops->range[0], sensor->ops->range[1], 0,… in sensor_probe()
1897 …input_set_abs_params(sensor->input_dev, ABS_TOOL_WIDTH, sensor->ops->brightness[0], sensor->ops->… in sensor_probe()
1900 sensor->input_dev->name = "proximity"; in sensor_probe()
1901 set_bit(EV_ABS, sensor->input_dev->evbit); in sensor_probe()
1902 …input_set_abs_params(sensor->input_dev, ABS_DISTANCE, sensor->ops->range[0], sensor->ops->range[1]… in sensor_probe()
1905 sensor->input_dev->name = "temperature"; in sensor_probe()
1906 set_bit(EV_ABS, sensor->input_dev->evbit); in sensor_probe()
1907 …input_set_abs_params(sensor->input_dev, ABS_THROTTLE, sensor->ops->range[0], sensor->ops->range[1]… in sensor_probe()
1910 sensor->input_dev->name = "pressure"; in sensor_probe()
1911 set_bit(EV_ABS, sensor->input_dev->evbit); in sensor_probe()
1912 …input_set_abs_params(sensor->input_dev, ABS_PRESSURE, sensor->ops->range[0], sensor->ops->range[1]… in sensor_probe()
1915 dev_err(&client->dev, "%s:unknow sensor type=%d\n", __func__, type); in sensor_probe()
1918 sensor->input_dev->dev.parent = &client->dev; in sensor_probe()
1920 result = input_register_device(sensor->input_dev); in sensor_probe()
1923 "Unable to register input device %s\n", sensor->input_dev->name); in sensor_probe()
1927 result = sensor_irq_init(sensor->client); in sensor_probe()
1930 "fail to init sensor irq,ret=%d\n", result); in sensor_probe()
1934 sensor->miscdev.parent = &client->dev; in sensor_probe()
1935 result = sensor_misc_device_register(sensor, type); in sensor_probe()
1938 "fail to register misc device %s\n", sensor->miscdev.name); in sensor_probe()
1942 g_sensor[type] = sensor; in sensor_probe()
1945 if ((sensor->ops->suspend) && (sensor->ops->resume)) { in sensor_probe()
1946 sensor->early_suspend.suspend = sensor_suspend; in sensor_probe()
1947 sensor->early_suspend.resume = sensor_resume; in sensor_probe()
1948 sensor->early_suspend.level = 0x02; in sensor_probe()
1949 register_early_suspend(&sensor->early_suspend); in sensor_probe()
1953 …fo(&client->dev, "%s:initialized ok,sensor name:%s,type:%d,id=%d\n\n", __func__, sensor->ops->name… in sensor_probe()
1967 struct sensor_private_data *sensor = in sensor_remove() local
1970 sensor->stop_work = 1; in sensor_remove()
1971 cancel_delayed_work_sync(&sensor->delaywork); in sensor_remove()
1972 misc_deregister(&sensor->miscdev); in sensor_remove()
1974 if ((sensor->ops->suspend) && (sensor->ops->resume)) in sensor_remove()
1975 unregister_early_suspend(&sensor->early_suspend); in sensor_remove()