diff options
author | Rui Miguel Silva <rui.silva@linaro.org> | 2016-02-02 14:23:16 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@google.com> | 2016-02-05 16:50:20 -0800 |
commit | 0273038df61349868d368dd9254eb629425a3378 (patch) | |
tree | be087359de04e60161becd5b176b3b3b7fb5c26e /drivers/staging/greybus/spi.c | |
parent | 9d4bb6c9183f1283158bbb00ebf65ec4cf18ee33 (diff) |
greybus: spi: add device_type field to device config
Add device_type field in device config operation to get the type of
device and try to expose less the kernel internal over greybus.
This include the spidev, spi-nor will fetch the correct nor id over
jede and a modalias that will have the previous behavior (name will set
the driver to be loaded).
As at it, fix a trivial error path and return immediately.
Tested: using gbsim and confirming that a spidev and mtd device were
created.
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/spi.c')
-rw-r--r-- | drivers/staging/greybus/spi.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/staging/greybus/spi.c b/drivers/staging/greybus/spi.c index ad4a1d62587d..c00492cc632e 100644 --- a/drivers/staging/greybus/spi.c +++ b/drivers/staging/greybus/spi.c @@ -285,6 +285,7 @@ static int gb_spi_setup_device(struct gb_spi *spi, u8 cs) struct spi_board_info spi_board = { {0} }; struct spi_device *spidev; int ret; + u8 dev_type; request.chip_select = cs; @@ -294,7 +295,20 @@ static int gb_spi_setup_device(struct gb_spi *spi, u8 cs) if (ret < 0) return ret; - memcpy(spi_board.modalias, response.name, sizeof(spi_board.modalias)); + dev_type = response.device_type; + + if (dev_type == GB_SPI_SPI_DEV) + strlcpy(spi_board.modalias, SPI_DEV_MODALIAS, + sizeof(spi_board.modalias)); + else if (dev_type == GB_SPI_SPI_NOR) + strlcpy(spi_board.modalias, SPI_NOR_MODALIAS, + sizeof(spi_board.modalias)); + else if (dev_type == GB_SPI_SPI_MODALIAS) + memcpy(spi_board.modalias, response.name, + sizeof(spi_board.modalias)); + else + return -EINVAL; + spi_board.mode = le16_to_cpu(response.mode); spi_board.bus_num = master->bus_num; spi_board.chip_select = cs; @@ -302,7 +316,7 @@ static int gb_spi_setup_device(struct gb_spi *spi, u8 cs) spidev = spi_new_device(master, &spi_board); if (!spidev) - ret = -EINVAL; + return -EINVAL; return 0; } |