Commit 519f2c22 authored by Martin Sperl's avatar Martin Sperl Committed by Mark Brown

spi: bcm2835aux: warn in dmesg that native cs is not really supported

From personal bad experience (even as the author of the original driver)
it shows that native-cs is "somewhat" supported by the spi bus driver
when using a buggy device tree.

So make sure that the driver is warning in dmesg about this fact
that we are running in a not supported mode that may have surprizing
limitations.

Fixes: 1ea29b39 ("spi: bcm2835aux: add bcm2835 auxiliary spi device...")
Signed-off-by: default avatarMartin Sperl <kernel@martin.sperl.org>
Acked-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 509c5836
...@@ -396,6 +396,38 @@ static void bcm2835aux_spi_handle_err(struct spi_master *master, ...@@ -396,6 +396,38 @@ static void bcm2835aux_spi_handle_err(struct spi_master *master,
bcm2835aux_spi_reset_hw(bs); bcm2835aux_spi_reset_hw(bs);
} }
static int bcm2835aux_spi_setup(struct spi_device *spi)
{
int ret;
/* sanity check for native cs */
if (spi->mode & SPI_NO_CS)
return 0;
if (gpio_is_valid(spi->cs_gpio))
return 0;
/* for dt-backwards compatibility: only support native on CS0
* known things not supported with broken native CS:
* * multiple chip-selects: cs0-cs2 are all
* simultaniously asserted whenever there is a transfer
* this even includes SPI_NO_CS
* * SPI_CS_HIGH: cs are always asserted low
* * cs_change: cs is deasserted after each spi_transfer
* * cs_delay_usec: cs is always deasserted one SCK cycle
* after the last transfer
* probably more...
*/
dev_warn(&spi->dev,
"Native CS is not supported - please configure cs-gpio in device-tree\n");
if (spi->chip_select == 0)
return 0;
dev_warn(&spi->dev, "Native CS is not working for cs > 0\n");
return -EINVAL;
}
static int bcm2835aux_spi_probe(struct platform_device *pdev) static int bcm2835aux_spi_probe(struct platform_device *pdev)
{ {
struct spi_master *master; struct spi_master *master;
...@@ -425,6 +457,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) ...@@ -425,6 +457,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)
* a spi_transfer * a spi_transfer
*/ */
master->num_chipselect = 1; master->num_chipselect = 1;
master->setup = bcm2835aux_spi_setup;
master->transfer_one = bcm2835aux_spi_transfer_one; master->transfer_one = bcm2835aux_spi_transfer_one;
master->handle_err = bcm2835aux_spi_handle_err; master->handle_err = bcm2835aux_spi_handle_err;
master->prepare_message = bcm2835aux_spi_prepare_message; master->prepare_message = bcm2835aux_spi_prepare_message;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment