hello.
my spi bus connection image is follows:
tegra-SoC
+ ----SPI
+ ----EEPROM(93xx56)
I think to need the GPIO’s mux setting, SPI compatible setting, and EEP compatible setting. that way, the kernel can recognize to use SPI bus, and can load the compatible module.
I think the EEPROM is connect on SPI as slave device, so the Device Tree needs the EEPROM compatible description.
Here is the DTSI file , please tell me some advice.
( Sorry, I don’t know how to devide the files, too long… )
[tegra210-porg-pinmux-p3448-0002-b00.dtsi]
/ {
pinmux: pinmux@700008d4 {
status = "okay";
pinctrl-names = "default", "drive", "unused";
pinctrl-0 = <&pinmux_default>;
pinctrl-1 = <&drive_default>;
pinctrl-2 = <&pinmux_unused_lowpower>;
pinmux_default: common {
...
spi1_mosi_pc0 {
nvidia,pins = "spi1_mosi_pc0";
nvidia,function = "spi1";
nvidia,pull = <TEGRA_PIN_PULL_NONE>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
};
spi1_miso_pc1 {
nvidia,pins = "spi1_miso_pc1";
nvidia,function = "spi1";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
};
spi1_sck_pc2 {
nvidia,pins = "spi1_sck_pc2";
nvidia,function = "spi1";
nvidia,pull = <TEGRA_PIN_PULL_NONE>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
};
spi1_cs0_pc3 {
nvidia,pins = "spi1_cs0_pc3";
nvidia,function = "spi1";
nvidia,pull = <TEGRA_PIN_PULL_NONE>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
};
.....
};
};
};
[tegra210-porg-p3448-common.dtsi]
/{
nvidia,boardids = "3448";
nvidia,proc-boardid = "3448";
nvidia,pmu-boardid = "3448";
nvidia,fastboot-usb-pid = <0xb442>;
chosen {
nvidia,tegra-porg-sku;
stdout-path = "/serial@70006000";
nvidia,tegra-always-on-personality;
no-tnid-sn;
bootargs = "kmemleak=on earlycon=uart8250,mmio32,0x70006000";
};
....
spi@7000d400 {
status = "okay";
compatible = "spidev";
reg = <0x0 0x7000d400 0x0 0x200>;
spi-max-frequency = <20000000>;
nvidia,enable-hw-based-cs;
nvidia,cs-setup-clk-count = <0x1e>;
nvidia,cs-hold-clk-count = <0x1e>;
nvidia,rx-clk-tap-delay = <0x1f>;
nvidia,tx-clk-tap-delay = <0x0>;
};
....
gpio: gpio@6000d000 {
suspend_gpio: system-suspend-gpio {
status = "okay";
gpio-hog;
output-high;
gpio-suspend;
suspend-output-low;
gpios = <
TEGRA_GPIO(A, 6) 0
>;
};
};
....
pinmux@700008d4 {
dvfs_pwm_active_state: dvfs_pwm_active {
dvfs_pwm_pbb1 {
nvidia,pins = "dvfs_pwm_pbb1";
nvidia,tristate = <TEGRA_PIN_DISABLE>;
};
};
dvfs_pwm_inactive_state: dvfs_pwm_inactive {
dvfs_pwm_pbb1 {
nvidia,pins = "dvfs_pwm_pbb1";
nvidia,tristate = <TEGRA_PIN_ENABLE>;
};
};
};
.....
};
[tegra210-porg-eeprom-manager.dtsi]
/ {
maker_eep: eep@0 {
status = "okay";
bus = <&spi0>;
compatible = "microchip,eeprom-93xx56";
devnode = "m_eeprom";
spi-max-frequency = <1000000>;
spi-cs-high;
spi-cpha;
spi-3wire;
size = <256>;
data-size = <16>; /* 93LC56B */
};
};
In this case,
- don’t appear ‘/dev/spi*’ or ‘/dev/*eep*’ file.
- ‘spi_93xx56’ indicated in ‘lsmod’ lists.
- In ‘/sys/bus/spi/drivers/’, both ‘spi_93xx56’ and ‘spidev’ are exsist.
- the message ‘spidev: module is already loaded’ in ‘dmesg’.
thanks.