|
|
|
#
|
|
|
|
# SPDX-License-Identifier: GPL-2.0+
|
|
|
|
#
|
|
|
|
|
pinctrl: add pin control uclass support
This creates a new framework for handling of pin control devices,
i.e. devices that control different aspects of package pins.
This uclass handles pinmuxing and pin configuration; pinmuxing
controls switching among silicon blocks that share certain physical
pins, pin configuration handles electronic properties such as pin-
biasing, load capacitance etc.
This framework can support the same device tree bindings, but if you
do not need full interface support, you can disable some features to
reduce memory foot print. Typically around 1.5KB is necessary to
include full-featured uclass support on ARM board (CONFIG_PINCTRL +
CONFIG_PINCTRL_FULL + CONFIG_PINCTRL_GENERIC + CONFIG_PINCTRL_PINMUX),
for example.
We are often limited on code size for SPL. Besides, we still have
many boards that do not support device tree configuration. The full
pinctrl, which requires OF_CONTROL, does not make sense for those
boards. So, this framework also has a Do-It-Yourself (let's say
simple pinctrl) interface. With CONFIG_PINCTRL_FULL disabled, the
uclass itself provides no systematic mechanism for identifying the
peripheral device, applying pinctrl settings, etc. They must be
done in each low-level driver. In return, you can save much memory
footprint and it might be useful especially for SPL.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years ago
|
|
|
obj-y += pinctrl-uclass.o
|
|
|
|
obj-$(CONFIG_$(SPL_)PINCTRL_GENERIC) += pinctrl-generic.o
|
|
|
|
|
|
|
|
obj-$(CONFIG_PINCTRL_AT91) += pinctrl-at91.o
|
|
|
|
obj-$(CONFIG_PINCTRL_AT91PIO4) += pinctrl-at91-pio4.o
|
pinctrl: imx: Introduce pinctrl driver for i.MX6
Introduce pinctrl for i.MX6
1. pinctrl-imx.c is for common usage. It's used by i.MX6/7.
2. Add PINCTRL_IMX PINCTRL_IMX6 Kconfig entry.
3. To the pinctrl_ops implementation, only set_state is implemented.
To i.MX6/7, the pinctrl dts entry is as following:
&iomuxc {
pinctrl-names = "default";
pinctrl_csi1: csi1grp {
fsl,pins = <
MX6UL_PAD_CSI_MCLK__CSI_MCLK 0x1b088
MX6UL_PAD_CSI_PIXCLK__CSI_PIXCLK 0x1b088
MX6UL_PAD_CSI_VSYNC__CSI_VSYNC 0x1b088
>;
};
[.....]
};
there is no property named function or groups. So pinctrl_generic_set_state
can not be used here.
5. This driver is a simple implementation for i.mx iomux controller,
only parse the fsl,pins property and write value to registers.
6. With DEBUG enabled, we can see log when "i2c bus 0":
"
set_state_simple op missing
imx_pinctrl_set_state: i2c1grp
mux_reg 0x14c, conf_reg 0x3bc, input_reg 0x5d8, mux_mode 0x0, input_val 0x1, config_val 0x4000007f
write mux: offset 0x14c val 0x10
select_input: offset 0x5d8 val 0x1
write config: offset 0x3bc val 0x7f
mux_reg 0x148, conf_reg 0x3b8, input_reg 0x5d4, mux_mode 0x0, input_val 0x1, config_val 0x4000007f
write mux: offset 0x148 val 0x10
select_input: offset 0x5d4 val 0x1
write config: offset 0x3b8 val 0x7f
"
this means imx6 pinctrl driver works as expected.
Signed-off-by: Peng Fan <van.freenix@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
9 years ago
|
|
|
obj-y += nxp/
|
|
|
|
obj-$(CONFIG_ARCH_ASPEED) += aspeed/
|
|
|
|
obj-$(CONFIG_ARCH_ATH79) += ath79/
|
|
|
|
obj-$(CONFIG_ARCH_RMOBILE) += renesas/
|
|
|
|
obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/
|
|
|
|
obj-$(CONFIG_PINCTRL_SANDBOX) += pinctrl-sandbox.o
|
|
|
|
|
|
|
|
obj-$(CONFIG_PINCTRL_UNIPHIER) += uniphier/
|
|
|
|
obj-$(CONFIG_PINCTRL_PIC32) += pinctrl_pic32.o
|
|
|
|
obj-$(CONFIG_PINCTRL_EXYNOS) += exynos/
|
|
|
|
obj-$(CONFIG_PINCTRL_MESON) += meson/
|
|
|
|
obj-$(CONFIG_ARCH_MVEBU) += mvebu/
|
|
|
|
obj-$(CONFIG_PINCTRL_SINGLE) += pinctrl-single.o
|
|
|
|
obj-$(CONFIG_PINCTRL_STI) += pinctrl-sti.o
|
|
|
|
obj-$(CONFIG_PINCTRL_STM32) += pinctrl_stm32.o
|
|
|
|
obj-y += broadcom/
|