Loading drivers/input/misc/akm09911.c +59 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ struct akm_compass_data { struct pinctrl *pinctrl; struct pinctrl_state *pin_default; struct pinctrl_state *pin_reset; struct sensors_classdev cdev; wait_queue_head_t drdy_wq; wait_queue_head_t open_wq; Loading Loading @@ -89,6 +90,24 @@ struct akm_compass_data { struct regulator *vio; }; static struct sensors_classdev sensors_cdev = { .name = "akm09911-mag", .vendor = "Asahi Kasei Microdevices Corporation", .version = 1, .handle = SENSORS_MAGNETIC_FIELD_HANDLE, .type = SENSOR_TYPE_MAGNETIC_FIELD, .max_range = "1228.8", .resolution = "0.06", .sensor_power = "0.35", .min_delay = 10000, .fifo_reserved_event_count = 0, .fifo_max_event_count = 0, .enabled = 0, .delay_msec = 10, .sensors_enable = NULL, .sensors_poll_delay = NULL, }; static struct akm_compass_data *s_akm; /***** I2C I/O function ***********************************************/ Loading Loading @@ -829,6 +848,23 @@ static void akm_compass_sysfs_update_status( en, atomic_read(&akm->active)); } static int akm_enable_set(struct sensors_classdev *sensors_cdev, unsigned int enable) { struct akm_compass_data *akm = container_of(sensors_cdev, struct akm_compass_data, cdev); mutex_lock(&akm->val_mutex); akm->enable_flag &= ~(1<<MAG_DATA_FLAG); akm->enable_flag |= ((uint32_t)(enable))<<MAG_DATA_FLAG; mutex_unlock(&akm->val_mutex); akm_compass_sysfs_update_status(akm); return 0; } static ssize_t akm_compass_sysfs_enable_show( struct akm_compass_data *akm, char *buf, int pos) { Loading Loading @@ -913,6 +949,19 @@ static ssize_t akm_enable_fusion_store( } /***** sysfs delay **************************************************/ static int akm_poll_delay_set(struct sensors_classdev *sensors_cdev, unsigned int delay_msec) { struct akm_compass_data *akm = container_of(sensors_cdev, struct akm_compass_data, cdev); mutex_lock(&akm->val_mutex); akm->delay[MAG_DATA_FLAG] = delay_msec * 1000000; mutex_unlock(&akm->val_mutex); return 0; } static ssize_t akm_compass_sysfs_delay_show( struct akm_compass_data *akm, char *buf, int pos) { Loading Loading @@ -1706,6 +1755,16 @@ int akm_compass_probe(struct i2c_client *client, const struct i2c_device_id *id) goto exit6; } s_akm->cdev = sensors_cdev; s_akm->cdev.sensors_enable = akm_enable_set; s_akm->cdev.sensors_poll_delay = akm_poll_delay_set; err = sensors_classdev_register(&client->dev, &s_akm->cdev); if (err) { dev_err(&client->dev, "class device create failed: %d\n", err); goto exit6; } dev_info(&client->dev, "successfully probed."); return 0; Loading Loading
drivers/input/misc/akm09911.c +59 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ struct akm_compass_data { struct pinctrl *pinctrl; struct pinctrl_state *pin_default; struct pinctrl_state *pin_reset; struct sensors_classdev cdev; wait_queue_head_t drdy_wq; wait_queue_head_t open_wq; Loading Loading @@ -89,6 +90,24 @@ struct akm_compass_data { struct regulator *vio; }; static struct sensors_classdev sensors_cdev = { .name = "akm09911-mag", .vendor = "Asahi Kasei Microdevices Corporation", .version = 1, .handle = SENSORS_MAGNETIC_FIELD_HANDLE, .type = SENSOR_TYPE_MAGNETIC_FIELD, .max_range = "1228.8", .resolution = "0.06", .sensor_power = "0.35", .min_delay = 10000, .fifo_reserved_event_count = 0, .fifo_max_event_count = 0, .enabled = 0, .delay_msec = 10, .sensors_enable = NULL, .sensors_poll_delay = NULL, }; static struct akm_compass_data *s_akm; /***** I2C I/O function ***********************************************/ Loading Loading @@ -829,6 +848,23 @@ static void akm_compass_sysfs_update_status( en, atomic_read(&akm->active)); } static int akm_enable_set(struct sensors_classdev *sensors_cdev, unsigned int enable) { struct akm_compass_data *akm = container_of(sensors_cdev, struct akm_compass_data, cdev); mutex_lock(&akm->val_mutex); akm->enable_flag &= ~(1<<MAG_DATA_FLAG); akm->enable_flag |= ((uint32_t)(enable))<<MAG_DATA_FLAG; mutex_unlock(&akm->val_mutex); akm_compass_sysfs_update_status(akm); return 0; } static ssize_t akm_compass_sysfs_enable_show( struct akm_compass_data *akm, char *buf, int pos) { Loading Loading @@ -913,6 +949,19 @@ static ssize_t akm_enable_fusion_store( } /***** sysfs delay **************************************************/ static int akm_poll_delay_set(struct sensors_classdev *sensors_cdev, unsigned int delay_msec) { struct akm_compass_data *akm = container_of(sensors_cdev, struct akm_compass_data, cdev); mutex_lock(&akm->val_mutex); akm->delay[MAG_DATA_FLAG] = delay_msec * 1000000; mutex_unlock(&akm->val_mutex); return 0; } static ssize_t akm_compass_sysfs_delay_show( struct akm_compass_data *akm, char *buf, int pos) { Loading Loading @@ -1706,6 +1755,16 @@ int akm_compass_probe(struct i2c_client *client, const struct i2c_device_id *id) goto exit6; } s_akm->cdev = sensors_cdev; s_akm->cdev.sensors_enable = akm_enable_set; s_akm->cdev.sensors_poll_delay = akm_poll_delay_set; err = sensors_classdev_register(&client->dev, &s_akm->cdev); if (err) { dev_err(&client->dev, "class device create failed: %d\n", err); goto exit6; } dev_info(&client->dev, "successfully probed."); return 0; Loading