diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5cm.dtsi linux-4.9.87/arch/arm/boot/dts/at91sam9x5cm.dtsi --- linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5cm.dtsi 2019-01-24 11:31:55.474263111 -0600 +++ linux-4.9.87/arch/arm/boot/dts/at91sam9x5cm.dtsi 2019-01-24 12:23:10.802172067 -0600 @@ -43,48 +43,8 @@ atmel,has-pmecc; /* Enable PMECC */ atmel,pmecc-cap = <2>; atmel,pmecc-sector-size = <512>; - nand-on-flash-bbt; + /* nand-on-flash-bbt; */ status = "okay"; - - at91bootstrap@0 { - label = "at91bootstrap"; - reg = <0x0 0x40000>; - }; - - uboot@40000 { - label = "u-boot"; - reg = <0x40000 0x80000>; - }; - - ubootenv@c0000 { - label = "U-Boot Env"; - reg = <0xc0000 0x140000>; - }; - - kernel@200000 { - label = "kernel"; - reg = <0x200000 0x600000>; - }; - - rootfs@800000 { - label = "rootfs"; - reg = <0x800000 0x1f800000>; - }; - }; - }; - - leds { - compatible = "gpio-leds"; - - pb18 { - label = "pb18"; - gpios = <&pioB 18 GPIO_ACTIVE_LOW>; - linux,default-trigger = "heartbeat"; - }; - - pd21 { - label = "pd21"; - gpios = <&pioD 21 GPIO_ACTIVE_HIGH>; }; }; @@ -96,5 +56,4 @@ pinctrl-0 = <&pinctrl_1wire_cm>; status = "okay"; }; - }; diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5.dtsi linux-4.9.87/arch/arm/boot/dts/at91sam9x5.dtsi --- linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5.dtsi 2019-01-24 11:31:55.590263108 -0600 +++ linux-4.9.87/arch/arm/boot/dts/at91sam9x5.dtsi 2019-01-24 12:23:10.802172067 -0600 @@ -32,9 +32,6 @@ gpio3 = &pioD; tcb0 = &tcb0; tcb1 = &tcb1; - i2c0 = &i2c0; - i2c1 = &i2c1; - i2c2 = &i2c2; ssc0 = &ssc0; pwm0 = &pwm0; }; @@ -963,50 +960,7 @@ status = "disabled"; }; - i2c0: i2c@f8010000 { - compatible = "atmel,at91sam9x5-i2c"; - reg = <0xf8010000 0x100>; - interrupts = <9 IRQ_TYPE_LEVEL_HIGH 6>; - dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(7)>, - <&dma0 1 AT91_DMA_CFG_PER_ID(8)>; - dma-names = "tx", "rx"; - #address-cells = <1>; - #size-cells = <0>; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_i2c0>; - clocks = <&twi0_clk>; - status = "disabled"; - }; - - i2c1: i2c@f8014000 { - compatible = "atmel,at91sam9x5-i2c"; - reg = <0xf8014000 0x100>; - interrupts = <10 IRQ_TYPE_LEVEL_HIGH 6>; - dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(5)>, - <&dma1 1 AT91_DMA_CFG_PER_ID(6)>; - dma-names = "tx", "rx"; - #address-cells = <1>; - #size-cells = <0>; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_i2c1>; - clocks = <&twi1_clk>; - status = "disabled"; - }; - - i2c2: i2c@f8018000 { - compatible = "atmel,at91sam9x5-i2c"; - reg = <0xf8018000 0x100>; - interrupts = <11 IRQ_TYPE_LEVEL_HIGH 6>; - dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(9)>, - <&dma0 1 AT91_DMA_CFG_PER_ID(10)>; - dma-names = "tx", "rx"; - #address-cells = <1>; - #size-cells = <0>; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_i2c2>; - clocks = <&twi2_clk>; - status = "disabled"; - }; + /* /delete_node/ command does not work. */ uart0: serial@f8040000 { compatible = "atmel,at91sam9260-usart"; diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5ek.dtsi linux-4.9.87/arch/arm/boot/dts/at91sam9x5ek.dtsi --- linux-4.9.87.orig/arch/arm/boot/dts/at91sam9x5ek.dtsi 2019-01-24 11:31:55.590263108 -0600 +++ linux-4.9.87/arch/arm/boot/dts/at91sam9x5ek.dtsi 2019-01-24 12:23:10.802172067 -0600 @@ -25,23 +25,11 @@ &pinctrl_mmc0_slot0_clk_cmd_dat0 &pinctrl_mmc0_slot0_dat1_3>; status = "okay"; + /* external micro SD slot */ slot@0 { reg = <0>; bus-width = <4>; - cd-gpios = <&pioD 15 GPIO_ACTIVE_HIGH>; - }; - }; - - mmc1: mmc@f000c000 { - pinctrl-0 = < - &pinctrl_board_mmc1 - &pinctrl_mmc1_slot0_clk_cmd_dat0 - &pinctrl_mmc1_slot0_dat1_3>; - status = "okay"; - slot@0 { - reg = <0>; - bus-width = <4>; - cd-gpios = <&pioD 14 GPIO_ACTIVE_HIGH>; + cd-gpios = <&pioA 1 GPIO_ACTIVE_HIGH>; }; }; @@ -58,25 +46,12 @@ usb2: gadget@f803c000 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_board_usb2>; - atmel,vbus-gpio = <&pioB 16 GPIO_ACTIVE_HIGH>; - status = "okay"; - }; - - i2c0: i2c@f8010000 { - status = "okay"; - - wm8731: wm8731@1a { - compatible = "wm8731"; - reg = <0x1a>; - }; - }; - - adc0: adc@f804c000 { - atmel,adc-ts-wires = <4>; - atmel,adc-ts-pressure-threshold = <10000>; + /* atmel,vbus-gpio = <&pioB 16 GPIO_ACTIVE_HIGH>; mtcdt: no vbus-gpio */ status = "okay"; }; + /* A/D convertor is unusable on Conduit */ + pinctrl@fffff400 { camera_sensor { pinctrl_pck0_as_isi_mck: pck0_as_isi_mck-0 { @@ -118,7 +93,7 @@ }; spi0: spi@f0000000 { - status = "disabled"; /* conflict with mmc1 */ + status = "okay"; cs-gpios = <&pioA 14 0>, <0>, <0>, <0>; m25p80@0 { compatible = "atmel,at25df321a"; @@ -131,37 +106,20 @@ status = "okay"; }; - ssc0: ssc@f0010000 { - status = "okay"; - }; }; usb0: ohci@00600000 { status = "okay"; num-ports = <3>; - atmel,vbus-gpio = <0 /* &pioD 18 GPIO_ACTIVE_LOW *//* Activate to have access to port A */ - &pioD 19 GPIO_ACTIVE_LOW - &pioD 20 GPIO_ACTIVE_LOW - >; + //mtcdt: no vbus-gpio + // atmel,vbus-gpio = <0 /* &pioD 18 GPIO_ACTIVE_LOW *//* Activate to have access to port A */ + // &pioD 19 GPIO_ACTIVE_LOW + // &pioD 20 GPIO_ACTIVE_LOW + // >; }; usb1: ehci@00700000 { status = "okay"; }; }; - - sound { - compatible = "atmel,sam9x5-wm8731-audio"; - - atmel,model = "wm8731 @ AT91SAM9X5EK"; - - atmel,audio-routing = - "Headphone Jack", "RHPOUT", - "Headphone Jack", "LHPOUT", - "LLINEIN", "Line In Jack", - "RLINEIN", "Line In Jack"; - - atmel,ssc-controller = <&ssc0>; - atmel,audio-codec = <&wm8731>; - }; }; diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/Makefile linux-4.9.87/arch/arm/boot/dts/Makefile --- linux-4.9.87.orig/arch/arm/boot/dts/Makefile 2019-01-24 11:31:55.590263108 -0600 +++ linux-4.9.87/arch/arm/boot/dts/Makefile 2019-01-24 12:23:10.802172067 -0600 @@ -43,7 +43,8 @@ at91sam9g25ek.dtb \ at91sam9g35ek.dtb \ at91sam9x25ek.dtb \ - at91sam9x35ek.dtb + at91sam9x35ek.dtb \ + mtcap.dtb dtb-$(CONFIG_SOC_SAM_V7) += \ at91-kizbox2.dtb \ at91-sama5d2_ptc_ek.dtb \ =================================================================================================== The dts file contains pinctrl to set the pull-up and pull-down features using the at91 pinctrl driver. Because pins seemed to be assigned random values if not set, it is probably good to set any pin used by mts-io here, and it wouldn't be a bad idea to set unused pins as well, since they can be both pull-up and pull-down at the same time. For future hardware revisions, it should be possible to overwrite the pinctrl with an overlay prior to loading the mts-io driver. To use the pinctrl, one must call platform_device_register() in the driver. ================================================================================================== diff -Naru linux-4.9.87.orig/arch/arm/boot/dts/mtcap.dts linux-4.9.87/arch/arm/boot/dts/mtcap.dts --- linux-4.9.87.orig/arch/arm/boot/dts/mtcap.dts 1969-12-31 18:00:00.000000000 -0600 +++ linux-4.9.87/arch/arm/boot/dts/mtcap.dts 2019-01-31 18:11:18.651648726 -0600 @@ -0,0 +1,301 @@ +/* + * DTS file for Multi-Tech Systems MTCAP Hardware + * + * Copyright (C) 2019 by Multi-Tech Systems, + * + * Licensed under GPLv2 or later. + */ + +/dts-v1/; +#include "at91sam9g25.dtsi" +#include "at91sam9x5ek.dtsi" + +/ { + model = "Multi-Tech Systems MTCAP"; + compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; + + chosen { + bootargs = "mem=256M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2"; + }; + + aliases { + spi0 = "/ahb/apb/spi@f0000000"; + ssc0 = ""; + serial1 = ""; + serial2 = ""; + serial3 = ""; + serial4 = ""; + }; + + memory { + reg = <0x20000000 0x8000000>; + }; + + clocks { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + main_clock: clock@0 { + compatible = "atmel,osc", "fixed-clock"; + clock-frequency = <12000000>; + }; + }; + + ahb { + apb { + macb0: ethernet@f802c000 { + phy-mode = "rmii"; + status = "okay"; + }; + + mmc0: mmc@f0008000 { + pinctrl-names = "default"; + pinctrl-0 = < + /* &pinctrl_board_mmc0 */ + &pinctrl_mmc0_slot0_clk_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + }; + }; + + pinctrl@fffff400 { + mmc0 { + pinctrl_board_mmc0: mmc0-board { + atmel,pins = + ; /* PA4 gpio pin pull up and deglitch - WIFI enable */ + }; + }; + + nand { + pinctrl_nand: nand-0 { + atmel,pins = + ; /* PD13 periph A Data bit 7 */ + }; + /delete-node/ nand_16bits-0; + }; + + /* + * Pin D21 will be left floating when the power goes off on the radio. + * We need to pull it down to ensure it is low during radio power-off. + * pinctrl is loaded during the call to platform_device_register() in mts-io. + * If we need to customize this for various hardware revisions, these can + * be loaded as overlays prior to loading the mts-io module, overwriting the + * atmel,pins section. + */ + mts_io { + pinctrl_mts_io: mts_io-0 { + atmel,pins = + ; /* PD21 GPIO pull-down radio-monitor */ + output-high; + }; + pinctrl_mts_io_in: mts_io-1 { + atmel,pins = + ; /* PD19 GNSS Int */ + }; + pinctrl_mts_io_gnss: mts_io-2 { + atmel,pins = + ; /* PD15 N_GNSS_RESET */ + output-low; + }; + }; + }; + + rtc@fffffeb0 { + status = "okay"; + }; + + dbgu: serial@fffff200 { + status = "okay"; + atmel,use-dma-rx; + atmel,use-dma-tx; + }; + + usb2: gadget@f803c000 { + atmel,vbus-gpio = <&pioB 16 GPIO_ACTIVE_HIGH>; + status = "okay"; + }; + watchdog@fffffe40 { + status = "okay"; + }; + spi@f0000000 { + status = "okay"; + cs-gpios = <&pioA 7 0>, <&pioA 1 0>, <0>, <0>; + lora-spi@0 { + compatible = "mts,mtac"; + spi-max-frequency = <2000000>; + reg = <0>; + }; + lora-spi@1 { + compatible = "mts,mtac"; + spi-max-frequency = <2000000>; + reg = <1>; + }; + /delete-node/ m25p80@0; + }; + + /delete-node/ ssc@f0010000; + /delete-node/ mmc@f0008000; + /delete-node/ mmc@f000c000; + /delete-node/ serial@f801c000; + /delete-node/ serial@f8020000; + /delete-node/ serial@f8024000; + /delete-node/ serial@f8024400; + /delete-node/ serial@f8028000; + /delete-node/ serial@f8040000; + /delete-node/ serial@f8044000; + /delete-node/ gadget@f803c000; + /delete-node/ adc@f804c000; + /delete-node/ spi@f0004000; + }; + + nand0: nand@40000000 { + nand-bus-width = <8>; + nand-ecc-mode = "hw"; + atmel,has-pmecc; /* Enable PMECC */ + atmel,pmecc-sector-size = <512>; + status = "okay"; + reg = < 0x40000000 0x10000000 + 0xffffe000 0x600 /* PMECC Registers */ + 0xffffe600 0x200 /* PMECC Error Location Registers */ + 0x00100000 0x100000 /* PMECC looup table in ROM code */ + >; + atmel,pmecc-lookup-table-offset = <0x8000 0x10000>; + gpios = < &pioC 31 GPIO_ACTIVE_HIGH + &pioD 4 GPIO_ACTIVE_HIGH + 0 + >; + atmel,pmecc-cap = <4>; + atmel,nand-has-dma; + + nand@0 { + label = "NANDFlash"; + reg = <0x0 0x10000000>; + }; + at91bootstrap@0 { + label = "at91bootstrap"; + reg = <0x0 0x40000>; + }; + uboot@40000 { + label = "u-Boot"; + reg = <0x40000 0x80000>; + }; + ubootconfig0@c0000 { + label = "u-Boot Config"; + reg = <0xc0000 0xa0000>; + }; + ubootconfig1@160000 { + label = "u-Boot Redundant Config"; + reg = <0x160000 0xa0000>; + }; + uImage@200000 { + label = "uImage"; + reg = <0x200000 0x600000>; + }; + config0@800000 { + label = "Config"; + reg = <0x800000 0x800000>; + }; + config1@1000000 { + label = "OEM Config"; + reg = <0x1000000 0x800000>; + }; + rootfs@1800000 { + label = "Rootfs"; + reg = <0x1800000 0x8000000>; + }; + user@9800000 { + label = "User data"; + reg = <0x9800000 0x6800000>; + }; + }; + + usb0: ohci@00600000 { + status = "okay"; + num-ports = <3>; + }; + + usb1: ehci@00700000 { + status = "okay"; + }; + }; + + leds { + compatible = "gpio-leds"; + + pc25 { + label = "led-status"; + gpios = <&pioC 25 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "default-on"; + }; + pc15 { + label = "led-lora"; + gpios = <&pioC 15 GPIO_ACTIVE_LOW>; + }; + pc16 { + label = "led-cd"; + gpios = <&pioC 16 GPIO_ACTIVE_LOW>; + }; + pc20 { + label = "led-wifi"; + gpios = <&pioC 20 GPIO_ACTIVE_LOW>; + }; + }; + + /* GPS-PPS input on AP1 - enabled by overlay*/ + pps-0 { + compatible = "pps-gpio"; + gpios = <&pioC 10 0>; + capture-clear; + status = "disabled"; + }; + + i2c0: i2c@f8010000 { + compatible = "atmel,at91sam9x5-i2c"; + reg = <0xf8010000 0x100>; + interrupts = <9 IRQ_TYPE_LEVEL_HIGH 6>; + mas = <&dma0 1 AT91_DMA_CFG_PER_ID(7)>, + <&dma0 1 AT91_DMA_CFG_PER_ID(8)>; + dma-names = "tx", "rx"; + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c0>; + clocks = <&twi0_clk>; + status = "okay"; + id_eeprom@56 { + compatible = "atmel,24c04"; + reg = <0x56>; + pagesize = <16>; + status = "okay"; + }; + }; + + mts-io-0 { + status = "okay"; + compatible = "mts,mts-io"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_mts_io>; + }; +};