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

Commit b4dbb23a authored by Xiaogang Cui's avatar Xiaogang Cui
Browse files

pinctrl: msm: fix the error of QDSD implemention



Fix the error of QDSD implemention, which cause that the
drive strenth and pull information of QDSD are not set correctly.

Change-Id: I8bf12be249aa860b1e97dca6ea782f941cf4037c
Signed-off-by: default avatarXiaogang Cui <xiaogang@codeaurora.org>
parent e3771b62
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -279,44 +279,42 @@ static int msm_tlmm_qdsd_cfg(uint pin_no, unsigned long *config,
	switch (id) {
	case PIN_CONFIG_BIAS_DISABLE:
		mask = TLMMV_QDSD_PULL_MASK;
		shft = id * TLMMV4_QDSD_CONFIG_WIDTH + TLMMV4_QDSD_PULL_OFFSET;
		shft = pin_no * TLMMV4_QDSD_CONFIG_WIDTH
					+ TLMMV4_QDSD_PULL_OFFSET;
		data = TLMM_NO_PULL;
		if (!write) {
			val >>= shft;
			val &= mask;
			data = rval_to_pull(val);
			data = val & mask;
		}
		break;
	case PIN_CONFIG_BIAS_PULL_DOWN:
		mask = TLMMV_QDSD_PULL_MASK;
		shft = id * TLMMV4_QDSD_CONFIG_WIDTH + TLMMV4_QDSD_PULL_OFFSET;
		shft = pin_no * TLMMV4_QDSD_CONFIG_WIDTH
					+ TLMMV4_QDSD_PULL_OFFSET;
		data = TLMM_PULL_DOWN;
		if (!write) {
			val >>= shft;
			val &= mask;
			data = rval_to_pull(val);
			data = val & mask;
		}
		break;
	case PIN_CONFIG_BIAS_PULL_UP:
		mask = TLMMV_QDSD_PULL_MASK;
		shft = id * TLMMV4_QDSD_CONFIG_WIDTH + TLMMV4_QDSD_PULL_OFFSET;
		shft = pin_no * TLMMV4_QDSD_CONFIG_WIDTH
					+ TLMMV4_QDSD_PULL_OFFSET;
		data = TLMM_PULL_UP;
		if (!write) {
			val >>= shft;
			val &= mask;
			data = rval_to_pull(val);
			data = val & mask;
		}
		break;
	case PIN_CONFIG_DRIVE_STRENGTH:
		mask = TLMMV4_QDSD_DRV_MASK;
		shft = id * TLMMV4_QDSD_CONFIG_WIDTH;
		shft = pin_no * TLMMV4_QDSD_CONFIG_WIDTH;
		if (write) {
			data = pinconf_to_config_argument(*config);
			data = drv_str_to_rval(data);
		} else {
			val >>= shft;
			val &= mask;
			data = rval_to_drv_str(val);
			data = val & mask;
		}
		break;
	default:
@@ -325,7 +323,8 @@ static int msm_tlmm_qdsd_cfg(uint pin_no, unsigned long *config,

	if (write) {
		val &= ~(mask << shft);
		val |= (data << shft);
		/* QDSD software override bit */
		val |= ((data << shft) | BIT(31));
		writel_relaxed(val, cfg_reg);
	} else {
		*config = pinconf_to_config_packed(id, data);