[PATCH 4/6] powerpc: Add mmc-spi-slot bindings
Yann Pelletier
ypelletier at haivision.com
Wed Apr 1 07:36:20 EST 2009
Original post:
Anton Vorontsov avorontsov at ru.mvista.com
Sat Jan 24 06:50:37 EST 2009
Sorry if this looks crappy, it's paste from web archive since I was not on the list at that time.
I've applied this patch set [1 to 6] to enable SPI device to be listed in the device tree instead of platform kernel file.
It is working fine but ...
> The bindings describes a case where MMC/SD/SDIO slot directly connected
> to a SPI bus. Such setups are widely used on embedded PowerPC boards.
>
> The patch also adds the mmc-spi-slot entry to the OpenFirmware modalias
> table.
>
> Signed-off-by: Anton Vorontsov <avorontsov at ru.mvista.com>
> ---
> .../powerpc/dts-bindings/mmc-spi-slot.txt | 23
> ++++++++++++++++++++
> drivers/of/base.c | 1 +
> 2 files changed, 24 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/powerpc/dts-bindings/mmc-spi-slot.txt
>
> diff --git a/Documentation/powerpc/dts-bindings/mmc-spi-slot.txt
> b/Documentation/powerpc/dts-bindings/mmc-spi-slot.txt
> new file mode 100644
> index 0000000..c39ac28
> --- /dev/null
> +++ b/Documentation/powerpc/dts-bindings/mmc-spi-slot.txt
> @@ -0,0 +1,23 @@
> +MMC/SD/SDIO slot directly connected to a SPI bus
> +
> +Required properties:
> +- compatible : should be "mmc-spi-slot".
> +- reg : should specify SPI address (chip-select number).
> +- spi-max-frequency : maximum frequency for this device (Hz).
> +- voltage-ranges : two cells are required, first cell specifies minimum
> + slot voltage (mV), second cell specifies maximum slot voltage (mV).
> + Several ranges could be specified.
> +- gpios : (optional) may specify GPIOs in this order: Card-Detect GPIO,
> + Write-Protect GPIO.
> +
> +Example:
> +
> + mmc-slot at 0 {
> + compatible = "fsl,mpc8323rdb-mmc-slot",
> + "mmc-spi-slot";
> + reg = <0>;
> + gpios = <&qe_pio_d 14 1
> + &qe_pio_d 15 0>;
> + voltage-ranges = <3300 3300>;
> + spi-max-frequency = <50000000>;
> + };
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index cd17092..41c5dfd 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -446,6 +446,7 @@ struct of_modalias_table {
> };
> static struct of_modalias_table of_modalias_table[] = {
> { "fsl,mcu-mpc8349emitx", "mcu-mpc8349emitx" },
> + { "mmc-spi-slot", "mmc_spi" },
Here I had to add
{ "gs2970", "gs2970" },
{ "spidev", "spidev" },
> };
To make my device get probed. Otherwise I receive error
spi_master spi32766: cannot find modalias for /soc8313 at e0000000/spi at 7000/gs2970 at 0
spi_master spi32766: cannot find modalias for /soc8313 at e0000000/spi at 7000/spidev at 4
I wonder if those modalias are absolutely required. I would prefer not to add platform specific stuff to the kernel as this was my motivation to apply the patch. Would there be a way to get around this ?
Also, from patch 3/6 in the same patch set
+static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
+ const struct of_device_id *ofid)
.....
+ /* SPI controller is either clocked from QE or SoC clock. */
+ pdata->sysclk = get_brgfreq();
+ if (pdata->sysclk == -1) {
+ pdata->sysclk = fsl_get_sys_freq();
+ if (pdata->sysclk == -1) {
+ ret = -ENODEV;
+ goto err_clk;
+ }
+ }
get_brgfreq() in not defined in my system as I do not use QUICK_ENGINE
Thanks for support.
More information about the Linuxppc-dev
mailing list