Skip to content

Commit 7ba2f27

Browse files
hkallweitbroonie
authored andcommitted
spi: core: add hook flash_read_supported to spi_master
If hook spi_flash_read is implemented the fast flash read feature is enabled for all devices attached to the respective master. In most cases there is just one flash chip, however there are also devices with more than one flash chip, namely some WiFi routers. Then the fast flash read feature can be used for the first chip only. OpenWRT implemented an own handling of this case, using controller_data element of spi_device to hold the information whether fast flash read can be used for a device. This patch adds hook flash_read_supported to spi_master which is used to extend spi_flash_read_supported() by checking whether the fast flash read feature can be used for a specific spi_device. If the hook is not implemented the default behavior is to allow fast flash read for all devices (if spi_flash_read is implemented). Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: Mark Brown <[email protected]>
1 parent f55532a commit 7ba2f27

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

include/linux/spi/spi.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
372372
* @unprepare_message: undo any work done by prepare_message().
373373
* @spi_flash_read: to support spi-controller hardwares that provide
374374
* accelerated interface to read from flash devices.
375+
* @flash_read_supported: spi device supports flash read
375376
* @cs_gpios: Array of GPIOs to use as chip select lines; one per CS
376377
* number. Any individual value may be -ENOENT for CS lines that
377378
* are not GPIOs (driven by the SPI controller itself).
@@ -529,6 +530,7 @@ struct spi_master {
529530
struct spi_message *message);
530531
int (*spi_flash_read)(struct spi_device *spi,
531532
struct spi_flash_read_message *msg);
533+
bool (*flash_read_supported)(struct spi_device *spi);
532534

533535
/*
534536
* These hooks are for drivers that use a generic implementation
@@ -1158,7 +1160,9 @@ struct spi_flash_read_message {
11581160
/* SPI core interface for flash read support */
11591161
static inline bool spi_flash_read_supported(struct spi_device *spi)
11601162
{
1161-
return spi->master->spi_flash_read ? true : false;
1163+
return spi->master->spi_flash_read &&
1164+
(!spi->master->flash_read_supported ||
1165+
spi->master->flash_read_supported(spi));
11621166
}
11631167

11641168
int spi_flash_read(struct spi_device *spi,

0 commit comments

Comments
 (0)