|
@@ -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;
|
|
|
}
|