Add pinctrl for uart{0, 1} nodes
Set pinmux to uart for uart0 and uart1 pins since the uarts are enabled
in the device tree. uart0 previously was set in the u-boot device tree.
Add pinctrl support in MTK tty serial driver.
Change-Id: Ib0cd4d4014dcd3769d090172682b6a9442055819
diff --git a/arch/arm64/boot/dts/mediatek/mt8167-coral.dts b/arch/arm64/boot/dts/mediatek/mt8167-coral.dts
index c87f9ec..cbb7112 100644
--- a/arch/arm64/boot/dts/mediatek/mt8167-coral.dts
+++ b/arch/arm64/boot/dts/mediatek/mt8167-coral.dts
@@ -258,10 +258,14 @@
&uart0 {
status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins>;
};
&uart1 {
status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart1_pins>;
};
&pio {
@@ -301,6 +305,20 @@
};
};
+ uart0_pins: uart0 {
+ pins1 {
+ pinmux = <MT8167_PIN_62_URXD0__FUNC_URXD0>,
+ <MT8167_PIN_63_UTXD0__FUNC_UTXD0>;
+ };
+ };
+
+ uart1_pins: uart1 {
+ pins1 {
+ pinmux = <MT8167_PIN_64_URXD1__FUNC_URXD1>,
+ <MT8167_PIN_65_UTXD1__FUNC_UTXD1>;
+ };
+ };
+
aud_pins_default: audiodefault {
pins1 {
pinmux = <MT8167_PIN_40_KPROW0__FUNC_GPIO40>;
diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c
index c3f933d..e31a69e 100644
--- a/drivers/tty/serial/8250/8250_mtk.c
+++ b/drivers/tty/serial/8250/8250_mtk.c
@@ -10,6 +10,7 @@
#include <linux/module.h>
#include <linux/of_irq.h>
#include <linux/of_platform.h>
+#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/serial_8250.h>
@@ -26,6 +27,8 @@
int line;
struct clk *uart_clk;
struct clk *bus_clk;
+ struct pinctrl *pinctrl;
+ struct pinctrl_state *pins_default;
};
static void
@@ -194,6 +197,18 @@
} else
return -ENODEV;
+ data->pinctrl = devm_pinctrl_get(&pdev->dev);
+ if (IS_ERR(data->pinctrl)) {
+ dev_err(&pdev->dev, "Cannot find pinctrl!\n");
+ return PTR_ERR(data->pinctrl);
+ }
+
+ data->pins_default = pinctrl_lookup_state(data->pinctrl, "default");
+ if (IS_ERR(data->pins_default)) {
+ dev_err(&pdev->dev, "Cannot find default pinctrl group!\n");
+ return PTR_ERR(data->pins_default);
+ }
+
spin_lock_init(&uart.port.lock);
uart.port.mapbase = regs->start;
uart.port.irq = irq->start;