summaryrefslogtreecommitdiffstats
path: root/drivers/mfd
diff options
context:
space:
mode:
authorGwendal Grignou2019-05-18 01:38:55 +0200
committerLee Jones2019-07-02 13:11:31 +0200
commit1bb407f17c5316888c3c446e26cb2bb78943f236 (patch)
treee36d6247d84ce0a3f3abd5912ae94f0734216035 /drivers/mfd
parentmfd: madera: Add missing of table registration (diff)
downloadkernel-qcow2-linux-1bb407f17c5316888c3c446e26cb2bb78943f236.tar.gz
kernel-qcow2-linux-1bb407f17c5316888c3c446e26cb2bb78943f236.tar.xz
kernel-qcow2-linux-1bb407f17c5316888c3c446e26cb2bb78943f236.zip
mfd: cros_ec: Register cros_ec_lid_angle driver when presented
Register driver when EC indicates has precise lid angle calculation code running. Fix incorrect extra resource allocation in cros_ec_sensors_register(). Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd')
-rw-r--r--drivers/mfd/cros_ec_dev.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c
index 54a58df571b6..d992365472b8 100644
--- a/drivers/mfd/cros_ec_dev.c
+++ b/drivers/mfd/cros_ec_dev.c
@@ -297,13 +297,15 @@ 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 1 extra sensors in FIFO are needed */
- sensor_cells = kcalloc(sensor_num + 1, sizeof(struct mfd_cell),
+ /*
+ * Allocate 2 extra sensors if lid angle sensor and/or FIFO are needed.
+ */
+ sensor_cells = kcalloc(sensor_num + 2, sizeof(struct mfd_cell),
GFP_KERNEL);
if (sensor_cells == NULL)
goto error;
- sensor_platforms = kcalloc(sensor_num + 1,
+ sensor_platforms = kcalloc(sensor_num,
sizeof(struct cros_ec_sensor_platform),
GFP_KERNEL);
if (sensor_platforms == NULL)
@@ -363,6 +365,11 @@ static void cros_ec_sensors_register(struct cros_ec_dev *ec)
sensor_cells[id].name = "cros-ec-ring";
id++;
}
+ if (cros_ec_check_features(ec,
+ EC_FEATURE_REFINED_TABLET_MODE_HYSTERESIS)) {
+ sensor_cells[id].name = "cros-ec-lid-angle";
+ id++;
+ }
ret = mfd_add_devices(ec->dev, 0, sensor_cells, id,
NULL, 0, NULL);