On Thu, May 6, 2021 at 7:32 PM Denis Kalashnikov <denis281...@gmail.com> wrote: > + /* > + * MFD: NAND plus GPIO-controller. They use/share SoC GPIO lines. > Some of the > + * GPIO lines are multiplexed by a 8-bit latch (LVC573). > + * NAND is controlled by GPIO lines (bitbang), also some NAND control > lines > + * (nCE, ALE, CLE, READ) and data lines are multiplexed by a latch. > So driver > + * set control lines, enable latch ("latched them") and then transfer > data. > + * Several lines of the latch (not used for NAND control lines) are > used > + * as general-purpose GPIO. NAND ECC format is Mikrotik specific. > + */ > + /* > + > +-----------+ > + > | | > ++-----------------+ > | | > +| | > | | > +| | > | | > +| | > | | 3-4 lines > +| | > | +-------- > +| G | 8 lines > | 8-bit | GPIO > +| P > +-------+-------------------------------------------------+ | > (leds, SSR nCS) > +| I | | > | Latch | > +| O | | > | | > +| s | | > | LVC573 | 4 lines > +| | | > | +-------+ > +| | | > | | | > +| | | > | | | > +| | | > | | | > +| | | > | | | > +| | | > | | | > +| | | 8 > +-----------+ | > +| | | > | > +| | | l > | > +| | | i > | > +| SoC | | n > | > +| | | e > | > +| | | s > +----------------------------------+ | > +| | | | > | | > +| | | | > C | | > +| | | | > | nCE, CLE, ALE, | > +| | | | > O +----------------+ > +| | | | D > | READ > +| | | | > N | > +| | | | A > | > +| | | | N A N D > T | > +| | +-----------------+ T > | > +| | | > R | nRW, RDY > +| | | A > +----------+ > +| | | > O | | > +| | | > | | > +| | | > L | | > +| | | > | | > +| G | | > | | > +| P | > +----------------------------------+ | > +| I | 2 lines > | > +| O > +-----------------------------------------------------------------------+ > +| s | > +| | > ++-----------------+
This drawing has a small drawback. Looks like NAND RDY has no dedicated line and shares GPIO with the NAND Data#4. > + nand_gpio { > + compatible = "mikrotik,nand-gpio-latch"; > + > + /* NAND control gpios */ > + nand-read-gpios = <&gpio 3 0>; /* Read */ > + nand-rdy-gpios = <&gpio 4 0>; /* Ready */ > + nand-nrw-gpios = <&gpio 12 GPIO_ACTIVE_LOW>; /* Read/Write > Strobe */ > + nand-nce-gpios = <&gpio 13 GPIO_ACTIVE_LOW>; /* Chip Enable > */ > + nand-cle-gpios = <&gpio 14 0>; /* Command Latch */ > + nand-ale-gpios = <&gpio 15 0>; /* Address Latch */ > + > + /* Latch Enable */ > + nle-gpios = <&gpio 11 GPIO_ACTIVE_LOW>; > + > + nand-data-gpios = <&gpio 0 0>, > + <&gpio 1 0>, > + <&gpio 2 0>, > + <&gpio 3 0>, > + <&gpio 4 0>, > + <&gpio 13 0>, > + <&gpio 14 0>, > + <&gpio 15 0>; > + > + latch-gpios = <&gpio 0 GPIO_ACTIVE_LOW>, > + <&gpio 1 GPIO_ACTIVE_LOW>, > + <&gpio 2 GPIO_ACTIVE_LOW>; This driver is highly board specific and we use DTS not to configure it, but mostly to document HW interconnections. Also it is unusual when a same GPIO line is referenced multiple times from different properties. So maybe we should use a single property with magic positions and accomplish interconnection description with comments? E.g. gpios = <&gpio 0 ...>, /* NAND Data#0 / SSR strobe (SPI CS) */ <&gpio 1 ...>, /* NAND Data#1 / Power LED */ <&gpio 2 ...>, /* NAND Data#2 / User LED */ <&gpio 3 ...>, /* NAND Data#3 / NAND Read */ <&gpio 4 ...>, /* NAND Data#4 / NAND RDY */ <&gpio 13 ...>, /* NAND Data#5 / NAND nCE */ <&gpio 14 ...>, /* NAND Data#6 / NAND CLE */ <&gpio 15 ...>, /* NAND Data#7 / NAND ALE */ <&gpio 11 ...>; /* Latch enable */ This will simplify the driver code. -- Sergey _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel