All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johan Jonker <jbx6244@gmail.com>
To: kever.yang@rock-chips.com
Cc: sjg@chromium.org, philipp.tomsich@vrull.eu, lukma@denx.de,
	seanga2@gmail.com, u-boot@lists.denx.de
Subject: [PATCH v9 04/16] rockchip: rk3066: add rk3066 pinctrl driver
Date: Mon,  4 Apr 2022 16:19:14 +0200	[thread overview]
Message-ID: <20220404141926.6085-5-jbx6244@gmail.com> (raw)
In-Reply-To: <20220404141926.6085-1-jbx6244@gmail.com>

From: Paweł Jarosz <paweljarosz3691@gmail.com>

Add driver supporting pin multiplexing on rk3066 platform.

Signed-off-by: Paweł Jarosz <paweljarosz3691@gmail.com>
Signed-off-by: Johan Jonker <jbx6244@gmail.com>
---

Changed V9:
  change regmap source

Changed V7:
  restyle
  changed function prefix.
  restyle U_BOOT_DRIVER structure
  use OF_REAL
  use EOPNOTSUPP
---
 drivers/pinctrl/rockchip/Makefile         |   1 +
 drivers/pinctrl/rockchip/pinctrl-rk3066.c | 112 ++++++++++++++++++++++
 2 files changed, 113 insertions(+)
 create mode 100644 drivers/pinctrl/rockchip/pinctrl-rk3066.c

diff --git a/drivers/pinctrl/rockchip/Makefile b/drivers/pinctrl/rockchip/Makefile
index fcf19f877a..7d03f8101d 100644
--- a/drivers/pinctrl/rockchip/Makefile
+++ b/drivers/pinctrl/rockchip/Makefile
@@ -5,6 +5,7 @@
 obj-y += pinctrl-rockchip-core.o
 obj-$(CONFIG_ROCKCHIP_PX30) += pinctrl-px30.o
 obj-$(CONFIG_ROCKCHIP_RK3036) += pinctrl-rk3036.o
+obj-$(CONFIG_ROCKCHIP_RK3066) += pinctrl-rk3066.o
 obj-$(CONFIG_ROCKCHIP_RK3128) += pinctrl-rk3128.o
 obj-$(CONFIG_ROCKCHIP_RK3188) += pinctrl-rk3188.o
 obj-$(CONFIG_ROCKCHIP_RK322X) += pinctrl-rk322x.o
diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3066.c b/drivers/pinctrl/rockchip/pinctrl-rk3066.c
new file mode 100644
index 0000000000..598b63223e
--- /dev/null
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3066.c
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2021 Rockchip Electronics Co., Ltd
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dm/pinctrl.h>
+#include <regmap.h>
+#include <syscon.h>
+#include <linux/bitops.h>
+
+#include "pinctrl-rockchip.h"
+
+static int rk3066_pinctrl_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
+{
+	struct rockchip_pinctrl_priv *priv = bank->priv;
+	int iomux_num = (pin / 8);
+	struct regmap *regmap;
+	int reg, ret, mask, mux_type;
+	u8 bit;
+	u32 data;
+
+	regmap = priv->regmap_base;
+
+	/* get basic quadrupel of mux registers and the correct reg inside */
+	mux_type = bank->iomux[iomux_num].type;
+	reg = bank->iomux[iomux_num].offset;
+	reg += rockchip_get_mux_data(mux_type, pin, &bit, &mask);
+
+	data = (mask << (bit + 16));
+	data |= (mux & mask) << bit;
+	ret = regmap_write(regmap, reg, data);
+
+	return ret;
+}
+
+#define RK3066_PULL_OFFSET		0x118
+#define RK3066_PULL_PINS_PER_REG	16
+#define RK3066_PULL_BANK_STRIDE		8
+
+static void rk3066_pinctrl_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
+						 int pin_num, struct regmap **regmap,
+						 int *reg, u8 *bit)
+{
+	struct rockchip_pinctrl_priv *priv = bank->priv;
+
+	*regmap = priv->regmap_base;
+	*reg = RK3066_PULL_OFFSET;
+	*reg += bank->bank_num * RK3066_PULL_BANK_STRIDE;
+	*reg += (pin_num / RK3066_PULL_PINS_PER_REG) * 4;
+
+	*bit = pin_num % RK3066_PULL_PINS_PER_REG;
+};
+
+static int rk3066_pinctrl_set_pull(struct rockchip_pin_bank *bank,
+				   int pin_num, int pull)
+{
+	struct regmap *regmap;
+	int reg, ret;
+	u8 bit;
+	u32 data;
+
+	if (pull != PIN_CONFIG_BIAS_PULL_PIN_DEFAULT &&
+	    pull != PIN_CONFIG_BIAS_DISABLE)
+		return -EOPNOTSUPP;
+
+	rk3066_pinctrl_calc_pull_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
+	data = BIT(bit + 16);
+	if (pull == PIN_CONFIG_BIAS_DISABLE)
+		data |= BIT(bit);
+	ret = regmap_write(regmap, reg, data);
+
+	return ret;
+}
+
+static struct rockchip_pin_bank rk3066_pin_banks[] = {
+	PIN_BANK(0, 32, "gpio0"),
+	PIN_BANK(1, 32, "gpio1"),
+	PIN_BANK(2, 32, "gpio2"),
+	PIN_BANK(3, 32, "gpio3"),
+	PIN_BANK(4, 32, "gpio4"),
+	PIN_BANK(6, 16, "gpio6"),
+};
+
+static struct rockchip_pin_ctrl rk3066_pin_ctrl = {
+	.pin_banks		= rk3066_pin_banks,
+	.nr_banks		= ARRAY_SIZE(rk3066_pin_banks),
+	.grf_mux_offset		= 0xa8,
+	.set_mux		= rk3066_pinctrl_set_mux,
+	.set_pull		= rk3066_pinctrl_set_pull,
+};
+
+static const struct udevice_id rk3066_pinctrl_ids[] = {
+	{
+		.compatible = "rockchip,rk3066a-pinctrl",
+		.data = (ulong)&rk3066_pin_ctrl
+	},
+	{}
+};
+
+U_BOOT_DRIVER(rockchip_rk3066a_pinctrl) = {
+	.name		= "rockchip_rk3066a_pinctrl",
+	.id		= UCLASS_PINCTRL,
+	.ops		= &rockchip_pinctrl_ops,
+	.probe		= rockchip_pinctrl_probe,
+#if CONFIG_IS_ENABLED(OF_REAL)
+	.bind		= dm_scan_fdt_dev,
+#endif
+	.of_match	= rk3066_pinctrl_ids,
+	.priv_auto	= sizeof(struct rockchip_pinctrl_priv),
+};
-- 
2.20.1


  parent reply	other threads:[~2022-04-04 14:21 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-04 14:19 [PATCH v9 00/16] Add Rikomagic MK808 board Johan Jonker
2022-04-04 14:19 ` [PATCH v9 01/16] rockchip: rk3066-power: sync power domain dt-binding header from Linux Johan Jonker
2022-04-06 15:01   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 02/16] rockchip: rk3066: add grf header file Johan Jonker
2022-04-09  3:49   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 03/16] rockchip: rk3066: add clock driver for rk3066 soc Johan Jonker
2022-04-09  3:49   ` Kever Yang
2022-04-04 14:19 ` Johan Jonker [this message]
2022-04-09  3:49   ` [PATCH v9 04/16] rockchip: rk3066: add rk3066 pinctrl driver Kever Yang
2022-04-04 14:19 ` [PATCH v9 05/16] rockchip: rk3066: add sdram driver Johan Jonker
2022-04-09  3:50   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 06/16] arm: dts: rockchip: fix rk3xxx-u-boot.dtsi Johan Jonker
2022-04-09  3:50   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 07/16] arm: dts: rockchip: fix include rk3xxx-u-boot.dtsi Johan Jonker
2022-04-09  3:50   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 08/16] arm: dts: rockchip: add rk3066a.dtsi Johan Jonker
2022-04-09  3:52   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 09/16] arm: dts: rockchip: add rk3066a-mk808.dts Johan Jonker
2022-04-09  3:52   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 10/16] rockchip: rk3066: add include Johan Jonker
2022-04-04 14:19 ` [PATCH v9 11/16] rockchip: rk3066: add rk3066_common.h include Johan Jonker
2022-04-04 14:19 ` [PATCH v9 12/16] rockchip: rk3066: add core support Johan Jonker
2022-04-09  3:55   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 13/16] rockchip: rk3066: add Rikomagic MK808 board Johan Jonker
2022-04-09  3:57   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 14/16] rockchip: rk3066: add mk808_defconfig Johan Jonker
2022-04-09  3:57   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 15/16] rockchip: tools: add rk3066 support to rkcommon.c Johan Jonker
2022-04-09  3:56   ` Kever Yang
2022-04-04 14:19 ` [PATCH v9 16/16] doc: rockchip: add rk3066 Rikomagic MK808 Johan Jonker
2022-04-09  4:00   ` Kever Yang
2022-04-10  9:08     ` Johan Jonker
2022-04-11 10:06       ` Kever Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220404141926.6085-5-jbx6244@gmail.com \
    --to=jbx6244@gmail.com \
    --cc=kever.yang@rock-chips.com \
    --cc=lukma@denx.de \
    --cc=philipp.tomsich@vrull.eu \
    --cc=seanga2@gmail.com \
    --cc=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.