platform/chrome: mfd/cros_ec_dev: Add sysfs entry to set keyboard wake lid angle
This adds a sysfs attribute (/sys/class/chromeos/cros_ec/kb_wake_angle) used to set and get the keyboard wake lid angle. This attribute is present only if 2 accelerometers are controlled by the EC. This patch also moves the cros_ec features check before the device is added so the features map obtained from the EC is ready on time. Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Benson Leung <bleung@chromium.org>
This commit is contained in:

committed by
Benson Leung

parent
b082b2e145
commit
c1d1e91aff
@@ -305,8 +305,8 @@ static void cros_ec_sensors_register(struct cros_ec_dev *ec)
|
||||
|
||||
resp = (struct ec_response_motion_sense *)msg->data;
|
||||
sensor_num = resp->dump.sensor_count;
|
||||
/* Allocate 2 extra sensors in case lid angle or FIFO are needed */
|
||||
sensor_cells = kzalloc(sizeof(struct mfd_cell) * (sensor_num + 2),
|
||||
/* Allocate 1 extra sensors in FIFO are needed */
|
||||
sensor_cells = kzalloc(sizeof(struct mfd_cell) * (sensor_num + 1),
|
||||
GFP_KERNEL);
|
||||
if (sensor_cells == NULL)
|
||||
goto error;
|
||||
@@ -362,16 +362,10 @@ static void cros_ec_sensors_register(struct cros_ec_dev *ec)
|
||||
sensor_type[resp->info.type]++;
|
||||
id++;
|
||||
}
|
||||
if (sensor_type[MOTIONSENSE_TYPE_ACCEL] >= 2) {
|
||||
sensor_platforms[id].sensor_num = sensor_num;
|
||||
|
||||
sensor_cells[id].name = "cros-ec-angle";
|
||||
sensor_cells[id].id = 0;
|
||||
sensor_cells[id].platform_data = &sensor_platforms[id];
|
||||
sensor_cells[id].pdata_size =
|
||||
sizeof(struct cros_ec_sensor_platform);
|
||||
id++;
|
||||
}
|
||||
if (sensor_type[MOTIONSENSE_TYPE_ACCEL] >= 2)
|
||||
ec->has_kb_wake_angle = true;
|
||||
|
||||
if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) {
|
||||
sensor_cells[id].name = "cros-ec-ring";
|
||||
id++;
|
||||
@@ -424,6 +418,14 @@ static int ec_device_probe(struct platform_device *pdev)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
/* check whether this EC is a sensor hub. */
|
||||
if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
|
||||
cros_ec_sensors_register(ec);
|
||||
|
||||
/* Take control of the lightbar from the EC. */
|
||||
lb_manual_suspend_ctrl(ec, 1);
|
||||
|
||||
/* We can now add the sysfs class, we know which parameter to show */
|
||||
retval = cdev_device_add(&ec->cdev, &ec->class_dev);
|
||||
if (retval) {
|
||||
dev_err(dev, "cdev_device_add failed => %d\n", retval);
|
||||
@@ -433,13 +435,6 @@ static int ec_device_probe(struct platform_device *pdev)
|
||||
if (cros_ec_debugfs_init(ec))
|
||||
dev_warn(dev, "failed to create debugfs directory\n");
|
||||
|
||||
/* check whether this EC is a sensor hub. */
|
||||
if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
|
||||
cros_ec_sensors_register(ec);
|
||||
|
||||
/* Take control of the lightbar from the EC. */
|
||||
lb_manual_suspend_ctrl(ec, 1);
|
||||
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
|
Reference in New Issue
Block a user