SPI child devices reg property misused?

EXTERNAL Lange Matthias (AA-DGW/ENG1) Matthias.Lange at beissbarth.com
Fri Aug 28 02:53:22 EST 2009


Hi,

I have a custom spi device connected to a Xilinx spi controller. To map the register space of the controller a reg property is defined in the device tree. Because my custom device also has register space which I want to map in my driver, I also defined a reg property. Because things weren't running smooth I started debugging and found in of_spi.c in the function

void of_register_spi_devices(struct spi_master *master, struct device_node *np)

the following piece of code (2.6.31)

...
/* Device address */
prop = of_get_property(nc, "reg", &len);
if (!prop || len < sizeof(*prop)) {
        dev_err(&master->dev, "%s has no 'reg' property\n",
                  nc->full_name);
        spi_dev_put(spi);
        continue;

}
spi->chip_select = *prop;

Why does the reg property value of spi child devices is assigned to the chip_select? Is there another way for spi devices to propagate their register space?

The related device tree snippet is as follows

xps-spi at 83440000 {
        compatible = "xlnx,xps-spi-2.00.b";
        interrupt-parent = <&int_ctrl>;
        interrupts = < 1 2 >;
        reg = < 0x83440000 0x10000 >;
        xlnx,family = "virtex4";
        xlnx,fifo-exist = <0x0>;
        xlnx,num-offchip-ss-bits = <0x0>;
        xlnx,num-ss-bits = <0x1>;
        xlnx,sck-ratio = <0x40>;
        #address-cells = <1>;
        #size-cells = <1>;
        device at 0,0 {
                compatible = "beissbarth,orion_cam";
                reg = <0x48 0x8>;
                spi-max-frequency = <25000000>;
                interrupt-parent = <&int_ctrl>;
                interrupts = < 8 2 >;
        };
};

Cheers,
Matthias.


More information about the Linuxppc-dev mailing list