mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-11 08:18:47 +00:00
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: 1ea29b39f4c812ec ("spi: bcm2835aux: add bcm2835 auxiliary spi device...") Signed-off-by: Martin Sperl <kernel@martin.sperl.org> Acked-by: Stefan Wahren <stefan.wahren@i2se.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
509c583620
commit
519f2c22a6
@ -396,6 +396,38 @@ static void bcm2835aux_spi_handle_err(struct spi_master *master,
|
||||
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)
|
||||
{
|
||||
struct spi_master *master;
|
||||
@ -425,6 +457,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)
|
||||
* a spi_transfer
|
||||
*/
|
||||
master->num_chipselect = 1;
|
||||
master->setup = bcm2835aux_spi_setup;
|
||||
master->transfer_one = bcm2835aux_spi_transfer_one;
|
||||
master->handle_err = bcm2835aux_spi_handle_err;
|
||||
master->prepare_message = bcm2835aux_spi_prepare_message;
|
||||
|
Loading…
x
Reference in New Issue
Block a user