Re: the difference between /drivers/spi and /drivers/mtd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Tomek,

On 10/12/19 16:01, Tomek Domek wrote:
> Hi
> I have in device tree node:
> 
> qspi: somename@0 {
>     compatible = "nameOfDriverFrom/drivers/spi";
>     reg = <someAddr size>;
>     clocks = <reference to clock>;
>     clock-names = "some names";
>     #address-cells = <1>;
>     #size-cells = <0>;
>     status = "disabled";
> };
> 
> and then I have such thing:
> &qspi {
>     pinctrl-names="default";
>     pinctrl-0 = <&reference to some pin controller>;
>     status = "okay";
>     spi-max-frequency = <11000000>;
> 
>     flash@0 {
>         compatible = "spi-flash (this is driver from /drivers/mtd/)";
>         #address-cells = <1>;
>         #size-cells = <1>;
>         reg = <0x0>;
>         spi-max-frequency = <22000000>;
>      };
> };
> 
> Why just one node isn't enough? And what frequency driver have at all -
> 11MHz or 22MHz?
> What is the difference between drivers defined in /drivers/spi and
> /drivers/mtd?

The qspi node is the Quad SPI master (=controller), i.e. the piece of
hardware, usually in the the SoC, that drives the (Quad) SPI bus.

The flash@0 node is the flash chip, external to the SoC, it's a SPI
slave that is driven by the SPI master.

Device tree describes the hardware. It is possible that the flash chip
supports up to 22 MHz but the SPI master supports up to 11 MHz. Using
the highest possible speed, 11 MHz in this case, is up to the driver
implementation.

> Does it mean that driver in /drivers/mtd can use somehow driver or the
> code from /drivers/spi?

Yes, absolutely. MTD is a kernel layer to drive memory chips. In order
to reach the memory chip it uses a communication bus. Typical
communication busses for MTD chips include [Quad] SPI, I2C and parallel.

Layering in Linux drivers is absolutely normal. E.g. when you connect a
pendrive to your PC you probably have the mass storage driver use the
USB controller driver, because the pendrive uses USB to connect. And the
USB controller driver uses the PCIe controller driver because the USB
controller is connected to the CPU via PCI express.

-- 
Luca

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux