|
@@ -135,6 +135,33 @@ static const struct syscon_gpio_data clps711x_mctrl_gpio = {
|
|
|
.dat_bit_offset = 0x40 * 8 + 8,
|
|
|
};
|
|
|
|
|
|
+static void rockchip_gpio_set(struct gpio_chip *chip, unsigned int offset,
|
|
|
+ int val)
|
|
|
+{
|
|
|
+ struct syscon_gpio_priv *priv = gpiochip_get_data(chip);
|
|
|
+ unsigned int offs;
|
|
|
+ u8 bit;
|
|
|
+ u32 data;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ offs = priv->dreg_offset + priv->data->dat_bit_offset + offset;
|
|
|
+ bit = offs % SYSCON_REG_BITS;
|
|
|
+ data = (val ? BIT(bit) : 0) | BIT(bit + 16);
|
|
|
+ ret = regmap_write(priv->syscon,
|
|
|
+ (offs / SYSCON_REG_BITS) * SYSCON_REG_SIZE,
|
|
|
+ data);
|
|
|
+ if (ret < 0)
|
|
|
+ dev_err(chip->parent, "gpio write failed ret(%d)\n", ret);
|
|
|
+}
|
|
|
+
|
|
|
+static const struct syscon_gpio_data rockchip_rk3328_gpio_mute = {
|
|
|
+ /* RK3328 GPIO_MUTE is an output only pin at GRF_SOC_CON10[1] */
|
|
|
+ .flags = GPIO_SYSCON_FEAT_OUT,
|
|
|
+ .bit_count = 1,
|
|
|
+ .dat_bit_offset = 0x0428 * 8 + 1,
|
|
|
+ .set = rockchip_gpio_set,
|
|
|
+};
|
|
|
+
|
|
|
#define KEYSTONE_LOCK_BIT BIT(0)
|
|
|
|
|
|
static void keystone_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
|
|
@@ -175,6 +202,10 @@ static const struct of_device_id syscon_gpio_ids[] = {
|
|
|
.compatible = "ti,keystone-dsp-gpio",
|
|
|
.data = &keystone_dsp_gpio,
|
|
|
},
|
|
|
+ {
|
|
|
+ .compatible = "rockchip,rk3328-grf-gpio",
|
|
|
+ .data = &rockchip_rk3328_gpio_mute,
|
|
|
+ },
|
|
|
{ }
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(of, syscon_gpio_ids);
|