From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-bn3nam01on0131.outbound.protection.outlook.com ([104.47.33.131]:60864 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S965761AbeCHFBk (ORCPT ); Thu, 8 Mar 2018 00:01:40 -0500 From: Sasha Levin To: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" CC: Shrirang Bagul , Jonathan Cameron , Sasha Levin Subject: [PATCH AUTOSEL for 4.9 089/190] iio: st_pressure: st_accel: Initialise sensor platform data properly Date: Thu, 8 Mar 2018 04:59:30 +0000 Message-ID: <20180308045810.8041-89-alexander.levin@microsoft.com> References: <20180308045810.8041-1-alexander.levin@microsoft.com> In-Reply-To: <20180308045810.8041-1-alexander.levin@microsoft.com> Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org List-ID: From: Shrirang Bagul [ Upstream commit 7383d44b84c94aaca4bf695a6bd8a69f2295ef1a ] This patch fixes the sensor platform data initialisation for st_pressure and st_accel device drivers. Without this patch, the driver fails to register the sensors when the user removes and re-loads the driver. 1. Unload the kernel modules for st_pressure $ sudo rmmod st_pressure_i2c $ sudo rmmod st_pressure 2. Re-load the driver $ sudo insmod st_pressure $ sudo insmod st_pressure_i2c Signed-off-by: Jonathan Cameron Acked-by: Linus Walleij Signed-off-by: Sasha Levin --- drivers/iio/accel/st_accel_core.c | 7 ++++--- drivers/iio/pressure/st_pressure_core.c | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel= _core.c index 3a557e3181ea..fe94415a0bc7 100644 --- a/drivers/iio/accel/st_accel_core.c +++ b/drivers/iio/accel/st_accel_core.c @@ -827,6 +827,8 @@ static const struct iio_trigger_ops st_accel_trigger_op= s =3D { int st_accel_common_probe(struct iio_dev *indio_dev) { struct st_sensor_data *adata =3D iio_priv(indio_dev); + struct st_sensors_platform_data *pdata =3D + (struct st_sensors_platform_data *)adata->dev->platform_data; int irq =3D adata->get_irq_data_ready(indio_dev); int err; =20 @@ -853,9 +855,8 @@ int st_accel_common_probe(struct iio_dev *indio_dev) &adata->sensor_settings->fs.fs_avl[0]; adata->odr =3D adata->sensor_settings->odr.odr_avl[0].hz; =20 - if (!adata->dev->platform_data) - adata->dev->platform_data =3D - (struct st_sensors_platform_data *)&default_accel_pdata; + if (!pdata) + pdata =3D (struct st_sensors_platform_data *)&default_accel_pdata; =20 err =3D st_sensors_init_sensor(indio_dev, adata->dev->platform_data); if (err < 0) diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure= /st_pressure_core.c index 44e46c159a7e..bec60299b6ec 100644 --- a/drivers/iio/pressure/st_pressure_core.c +++ b/drivers/iio/pressure/st_pressure_core.c @@ -638,6 +638,8 @@ static const struct iio_trigger_ops st_press_trigger_op= s =3D { int st_press_common_probe(struct iio_dev *indio_dev) { struct st_sensor_data *press_data =3D iio_priv(indio_dev); + struct st_sensors_platform_data *pdata =3D + (struct st_sensors_platform_data *)press_data->dev->platform_data; int irq =3D press_data->get_irq_data_ready(indio_dev); int err; =20 @@ -673,10 +675,8 @@ int st_press_common_probe(struct iio_dev *indio_dev) press_data->odr =3D press_data->sensor_settings->odr.odr_avl[0].hz; =20 /* Some devices don't support a data ready pin. */ - if (!press_data->dev->platform_data && - press_data->sensor_settings->drdy_irq.addr) - press_data->dev->platform_data =3D - (struct st_sensors_platform_data *)&default_press_pdata; + if (!pdata && press_data->sensor_settings->drdy_irq.addr) + pdata =3D (struct st_sensors_platform_data *)&default_press_pdata; =20 err =3D st_sensors_init_sensor(indio_dev, press_data->dev->platform_data)= ; if (err < 0) --=20 2.14.1