Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e3800f1 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "input: sensors: pull down 8916SKUH sensor GPIOs for power saving"

parents 66c922f7 052954a5
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -4,6 +4,10 @@ Required properties:

 - compatible					: Should be "avago,apds9930" or "avago,apds9900".
 - reg							: i2c slave address of the device.
 - pinctrl-names				: The pinctrl configration names of this sensor driver. Should be
					"default" and "sleep".
 - pinctrl-0					: Should specify pin control groups used for this controller.
 - pinctrl-1					: Should specify pin control groups used for this controller.
 - interrupt-parent				: Parent of interrupt.
 - interupts					: L/P sample interrupt to indicate new data ready.
 - vdd-supply					: Power supply needed to power up the device.
@@ -26,6 +30,9 @@ Required properties:
	 avago@39 {
		 compatible = "avago,apds9930";
		 reg = <0x39>;
		 pinctrl-names = "default","sleep";
		 pinctrl-0 = <&apds99xx_default>;
		 pinctrl-1 = <&apds99xx_sleep>;
		 interrupt-parent = <&msmgpio>;
		 interrupts = <80 0x2>;
		 vdd-supply = <&pm8110_l19>;
+10 −5
Original line number Diff line number Diff line
@@ -4,6 +4,10 @@ Required properties:

 - compatible		: Should be "st,lis3dh".
 - reg			: i2c slave address of the device.
 - pinctrl-names	: The pinctrl configration names of this sensor driver. Should be
				"lis3dh_default" and "lis3dh_sleep".
 - pinctrl-0		: Should specify pin control groups used for this controller.
 - pinctrl-1		: Should specify pin control groups used for this controller.
 - interrupt-parent	: Parent of interrupt.
 - interrupts		: Accelerometer sample interrupt to indicate new data ready.
 - vdd-supply		: Analog power supply needed to power device.
@@ -55,19 +59,20 @@ Example:
		st@18 {
			compatible = "st,lis3dh";
			reg = <0x18>;
			pinctrl-names = "default";
			pinctrl-names = "lis3dh_default","lis3dh_sleep";
			pinctrl-0 = <&lis3dh_int1_default>;
			interrupt-parent = <&msm_gpio 115 0x2002>;
			pinctrl-1 = <&lis3dh_int1_sleep>;
			interrupt-parent = <&msm_gpio>;
			interrupts = <115 0x2002>;
			vdd-supply = <&pm8110_l19>;
			vddio-supply = <&pm8110_l14>;
			vdd-supply = <&pm8916_l17>;
			vddio-supply = <&pm8916_l6>;
			st,min-interval = <5>;
			st,init-interval = <200>;
			st,axis-map-x = <1>;
			st,axis-map-y = <0>;
			st,axis-map-z = <2>;
			st,g-range = <2>;
			st,gpio-int1 = <&msmgpio 81 0x2>;
			st,gpio-int1 = <&msm_gpio 115 0x2002>;
			st,negate-x;
			st,negate-y;
			st,negate-z;
+0 −34
Original line number Diff line number Diff line
@@ -20,37 +20,3 @@
	qcom,board-id = <8 0>;
};
&tlmm_pinmux {
	apds9930_int_pin {
		qcom,pins = <&gp 113>;
		qcom,pin-func = <0>;
		qcom,num-grp-pins = <1>;
		label = "apds9930-irq";
		apds9930_default: apds9930_default {
			drive-strenghth = <6>;
			bias-pull-up;
		};
	};
};

&i2c_0 { /* BLSP1 QUP2 */
	avago@39 {
		compatible = "avago,apds9930";
		reg = <0x39>;
		pinctrl-names = "default";
		pinctrl-0 = <&apds9930_default>;
		interrupt-parent = <&msm_gpio>;
		interrupts = <113 0x2>;
		vdd-supply = <&pm8916_l17>;
		vio-supply = <&pm8916_l6>;
		avago,irq-gpio = <&msm_gpio 113 0x2>;
		avago,ps_threshold = <600>;
		avago,ps_hysteresis_threshold = <500>;
		avago,ps_pulse = <8>;
		avago,ps_pgain = <0>;
		avago,als_B = <223>;
		avago,als_C = <70>;
		avago,als_D = <142>;
		avago,ga_value = <48>;
	};
};
+12 −7
Original line number Diff line number Diff line
@@ -21,11 +21,11 @@
		qcom,num-grp-pins = <1>;
		label = "akm_reset_pin";
		akm_default: akm_default {
			  drive-strength = <16>;
			drive-strength = <6>;
			bias-pull-up;
		};
		akm_sleep: akm_sleep {
			   drive-strength = <16>;
			drive-strength = <2>;
			bias-pull-down;
		};
	};
@@ -36,7 +36,11 @@
		label = "lis3dh_int_pin";
		lis3dh_int1_default: int1_default {
			drive-strength = <6>;
			  bias-pull-up;
			bias-pull-down;
		};
		lis3dh_int1_sleep: int1_sleep {
			drive-strength = <2>;
			bias-pull-down;
		};
	};

@@ -91,8 +95,9 @@
	st@18 {
		compatible = "st,lis3dh";
		reg = <0x18>;
		pinctrl-names = "default";
		pinctrl-names = "lis3dh_default","lis3dh_sleep";
		pinctrl-0 = <&lis3dh_int1_default>;
		pinctrl-1 = <&lis3dh_int1_sleep>;
		interrupt-parent = <&msm_gpio>;
		vdd-supply = <&pm8916_l17>;
		vddio-supply = <&pm8916_l6>;
+53 −9
Original line number Diff line number Diff line
@@ -221,6 +221,9 @@ struct lis3dh_acc_data {
	struct i2c_client *client;
	struct lis3dh_acc_platform_data *pdata;
	struct sensors_classdev cdev;
	struct pinctrl *pinctrl;
	struct pinctrl_state *pin_default;
	struct pinctrl_state *pin_sleep;

	struct mutex lock;
	struct delayed_work input_work;
@@ -513,11 +516,6 @@ static void lis3dh_acc_device_power_off(struct lis3dh_acc_data *acc)
	if (err < 0)
		dev_err(&acc->client->dev, "soft power off failed: %d\n", err);

	if (gpio_is_valid(acc->pdata->gpio_int1))
		disable_irq_nosync(acc->irq1);
	if (gpio_is_valid(acc->pdata->gpio_int2))
		disable_irq_nosync(acc->irq2);

	lis3dh_acc_config_regulator(acc, false);

	if (acc->hw_initialized) {
@@ -540,10 +538,6 @@ static int lis3dh_acc_device_power_on(struct lis3dh_acc_data *acc)
		return err;
	}

	if (gpio_is_valid(acc->pdata->gpio_int1))
		enable_irq(acc->irq1);
	if (gpio_is_valid(acc->pdata->gpio_int2))
		enable_irq(acc->irq2);

	msleep(20);

@@ -774,6 +768,10 @@ static int lis3dh_acc_enable(struct lis3dh_acc_data *acc)
	int err;

	if (!atomic_cmpxchg(&acc->enabled, 0, 1)) {
		if (pinctrl_select_state(acc->pinctrl, acc->pin_default))
			dev_err(&acc->client->dev,
				"Can't select pinctrl default state\n");

		err = lis3dh_acc_device_power_on(acc);
		if (err < 0) {
			atomic_set(&acc->enabled, 0);
@@ -791,6 +789,9 @@ static int lis3dh_acc_disable(struct lis3dh_acc_data *acc)
	if (atomic_cmpxchg(&acc->enabled, 1, 0)) {
		cancel_delayed_work_sync(&acc->input_work);
		lis3dh_acc_device_power_off(acc);
		if (pinctrl_select_state(acc->pinctrl, acc->pin_sleep))
			dev_err(&acc->client->dev,
				"Can't select pinctrl sleep state\n");
	}

	return 0;
@@ -1300,6 +1301,33 @@ static void lis3dh_acc_input_cleanup(struct lis3dh_acc_data *acc)
	input_free_device(acc->input_dev);
}

static int lis3dh_pinctrl_init(struct lis3dh_acc_data *acc)
{
	struct i2c_client *client = acc->client;

	acc->pinctrl = devm_pinctrl_get(&client->dev);
	if (IS_ERR_OR_NULL(acc->pinctrl)) {
		dev_err(&client->dev, "Failed to get pinctrl\n");
		return PTR_ERR(acc->pinctrl);
	}

	acc->pin_default =
		pinctrl_lookup_state(acc->pinctrl, "lis3dh_default");
	if (IS_ERR_OR_NULL(acc->pin_default)) {
		dev_err(&client->dev, "Failed to look up default state\n");
		return PTR_ERR(acc->pin_default);
	}

	acc->pin_sleep =
		pinctrl_lookup_state(acc->pinctrl, "lis3dh_sleep");
	if (IS_ERR_OR_NULL(acc->pin_sleep)) {
		dev_err(&client->dev, "Failed to look up sleep state\n");
		return PTR_ERR(acc->pin_sleep);
	}

	return 0;
}

#ifdef CONFIG_OF
static int lis3dh_parse_dt(struct device *dev,
			struct lis3dh_acc_platform_data *pdata)
@@ -1454,6 +1482,18 @@ static int lis3dh_acc_probe(struct i2c_client *client,
		goto exit_kfree_pdata;
	}

	/* initialize pinctrl */
	err = lis3dh_pinctrl_init(acc);
	if (err) {
		dev_err(&client->dev, "Can't initialize pinctrl\n");
			goto exit_kfree_pdata;
	}
	err = pinctrl_select_state(acc->pinctrl, acc->pin_default);
	if (err) {
		dev_err(&client->dev,
			"Can't select pinctrl default state\n");
		goto exit_kfree_pdata;
	}

	if (acc->pdata->init) {
		err = acc->pdata->init();
@@ -1579,6 +1619,10 @@ static int lis3dh_acc_probe(struct i2c_client *client,
		disable_irq_nosync(acc->irq2);
	}

	if (pinctrl_select_state(acc->pinctrl, acc->pin_sleep))
		dev_err(&client->dev,
			"Can't select pinctrl sleep state\n");

	mutex_unlock(&acc->lock);

	dev_dbg(&client->dev, "%s: probed\n", LIS3DH_ACC_DEV_NAME);
Loading