Skip to content

Commit 62eb965

Browse files
SuperDavidWurkhuangtao
authored andcommitted
pinctrl: rockchip: Add IOMUX_WRITABLE_32BIT flag for rk3288 gpio0 iomux
There are writable 32 bits for PMU_GPIO0's iomux, so add the IOMUX_WRITABLE_32BIT to read iomux register at first, it would not change others' bits. Change-Id: I1fb27c60d5d26e5719b6911a78e7cdf144feba26 Signed-off-by: David Wu <david.wu@rock-chips.com>
1 parent c9d2218 commit 62eb965

1 file changed

Lines changed: 18 additions & 7 deletions

File tree

drivers/pinctrl/pinctrl-rockchip.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ enum rockchip_pinctrl_type {
8080
#define IOMUX_UNROUTED BIT(3)
8181
#define IOMUX_WIDTH_3BIT BIT(4)
8282
#define IOMUX_8WIDTH_2BIT BIT(5)
83+
#define IOMUX_WRITABLE_32BIT BIT(6)
8384

8485
/**
8586
* @type: iomux variant using IOMUX_* constants
@@ -1384,10 +1385,20 @@ static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
13841385
}
13851386
}
13861387

1387-
data = (mask << (bit + 16));
1388-
rmask = data | (data >> 16);
1389-
data |= (mux & mask) << bit;
1390-
ret = regmap_update_bits(regmap, reg, rmask, data);
1388+
if (mux_type & IOMUX_WRITABLE_32BIT) {
1389+
ret = regmap_read(regmap, reg, &data);
1390+
if (ret)
1391+
return ret;
1392+
1393+
data &= ~(mask << bit);
1394+
data |= (mux & mask) << bit;
1395+
ret = regmap_write(regmap, reg, data);
1396+
} else {
1397+
data = (mask << (bit + 16));
1398+
rmask = data | (data >> 16);
1399+
data |= (mux & mask) << bit;
1400+
ret = regmap_update_bits(regmap, reg, rmask, data);
1401+
}
13911402

13921403
return ret;
13931404
}
@@ -3926,9 +3937,9 @@ static struct rockchip_pin_ctrl rk3228_pin_ctrl = {
39263937
};
39273938

39283939
static struct rockchip_pin_bank rk3288_pin_banks[] = {
3929-
PIN_BANK_IOMUX_FLAGS(0, 24, "gpio0", IOMUX_SOURCE_PMU,
3930-
IOMUX_SOURCE_PMU,
3931-
IOMUX_SOURCE_PMU,
3940+
PIN_BANK_IOMUX_FLAGS(0, 24, "gpio0", IOMUX_SOURCE_PMU | IOMUX_WRITABLE_32BIT,
3941+
IOMUX_SOURCE_PMU | IOMUX_WRITABLE_32BIT,
3942+
IOMUX_SOURCE_PMU | IOMUX_WRITABLE_32BIT,
39323943
IOMUX_UNROUTED
39333944
),
39343945
PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", IOMUX_UNROUTED,

0 commit comments

Comments
 (0)