From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Wolfgang Ocker <weo@reccoware.de>
Cc: linuxppc-dev@ozlabs.org, Stefan Roese <sr@denx.de>
Subject: Re: [PATCH] Added gpios property for SPI slaves
Date: Sat, 25 Oct 2008 01:10:56 +0400 [thread overview]
Message-ID: <20081024211056.GA7309@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <1224878939.4039.22.camel@galileo.recco.de>
On Fri, Oct 24, 2008 at 10:08:59PM +0200, Wolfgang Ocker wrote:
> SPI slave devices require the specification of a chip select address.
> This patch allows that specification using the gpios property. The reg
> property remains supported.
>
> Signed-off-by: Wolfgang Ocker <weo@reccoware.de>
> ---
>
> --- linux-2.6.27.3/drivers/of/of_spi.c.of_spi_gpio 2008-10-22 23:38:01.000000000 +0200
> +++ linux-2.6.27.3/drivers/of/of_spi.c.of_spi_cshigh 2008-10-24 21:36:39.000000000 +0200
[...]
> --- linux-2.6.27.3/Documentation/powerpc/booting-without-of.txt.of_spi_gpio 2008-10-22 23:38:01.000000000 +0200
> +++ linux-2.6.27.3/Documentation/powerpc/booting-without-of.txt.of_spi_cshigh 2008-10-24 21:57:16.000000000 +0200
> @@ -1909,7 +1909,9 @@ platforms are moved over to use the flat
>
> SPI slave nodes must be children of the SPI master node and can
> contain the following properties.
> - - reg - (required) chip select address of device.
> + - reg - chip select address of device.
> + - gpios - chip select address of device (alternatively).
> + one of reg and gpios is required.
> - compatible - (required) name of SPI device following generic names
> recommended practice
> - spi-max-frequency - (required) Maximum SPI clocking speed of device in Hz
> @@ -1936,7 +1938,7 @@ platforms are moved over to use the flat
> codec@1 {
> compatible = "ti,tlv320aic26";
> spi-max-frequency = <100000>;
> - reg = <1>;
> + gpios = <&GPIO1 3>;
> };
> };
Close, but no cigar. Sorry. ;-) The bindings are fine as is, you don't
need to change them.
The scheme should look like this:
spi-controller {
#address-cells = <1>;
#size-cells = <0>;
/* two GPIOs, representing two chip selects: 0 and 1 */
gpios = <&pio 5 0 &pio 16 0>;
mmc-slot@0 {
reg = <0>;
};
touchscreen@1 {
reg = <1>;
};
}
Notice that "gpios" is spi-controller's property, not spi devices'.
It is truly as hardware works, SPI controllers consists of two units:
I/O, and chip-select machine. Most spi controllers don't have
dedicated chip-select machines, so they use GPIOs.
The spi controller driver should request all the specified gpios,
and then work with chip select numbers. Something like this:
struct spi_controller {
int *gpios;
unsigned int num_gpios;
...
}
int spi_set_chipselect(struct spi_controller *spi, int cs, int active)
{
/*
* chip-select is not necessary if there is just one device on
* the bus, so gpios = <> are not necessary either */
*/
if (!spi->num_gpios)
return 0;
if (cs > spi->num_gpios)
return -EINVAL;
gpio_set_value(spi->gpios[cs], active);
}
...
unsigned int of_num_gpios(struct device_node *node)
{
unsigned int num = 0;
while (gpio_is_valid(of_get_gpio(node, num)))
num++;
return num;
}
int spi_controller_probe(...)
{
spi_controller *spi;
...
spi->num_gpios = of_num_gpios(node);
if (spi->num_gpios) {
int i = spi->num_gpios;
spi->gpios = kzalloc(sizeof(int) * i, GFP_KERNEL);
if (!spi->gpios)
return -ENOMEM;
do
spi->gpios[i] = of_get_gpio(node, i);
while (!(i--));
}
...
}
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
next prev parent reply other threads:[~2008-10-24 21:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-24 20:08 [PATCH] Added gpios property for SPI slaves Wolfgang Ocker
2008-10-24 21:10 ` Anton Vorontsov [this message]
2008-10-24 21:29 ` Grant Likely
2008-10-24 21:41 ` Wolfgang Ocker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081024211056.GA7309@oksana.dev.rtsoft.ru \
--to=avorontsov@ru.mvista.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=sr@denx.de \
--cc=weo@reccoware.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.