diff options
author | Dmitry Shmidt <dimitrysh@google.com> | 2018-05-29 10:23:33 -0700 |
---|---|---|
committer | Dmitry Shmidt <dimitrysh@google.com> | 2018-05-29 15:10:34 -0700 |
commit | 1eafbcb7b6fe803aa6b0e07d3514ee791059179a (patch) | |
tree | 75391a513282f9e9d585c9384f43be332396ba28 | |
parent | 18932b51114bf370ed584aeb5dcd9ac6888a5b12 (diff) |
nanohub: Add <sensorhub,bl-max-frequency> and obey <spi-max-frequency>
<spi-max-frequency> allows to set max_speed_hz for SPI operations
<sensorhub,bl-max-frequency> allows to restrict bl max speed.
(default bl max speed is 1000000)
Change-Id: I2c946d918bf77bd49965b3ffbf6ecceccbd73d0d
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
(cherry picked from commit d22d0c6976b4bd8f2b489a9e3d859bca0598456a)
-rw-r--r-- | Documentation/devicetree/bindings/staging/nanohub.txt | 1 | ||||
-rw-r--r-- | drivers/staging/nanohub/main.c | 8 | ||||
-rw-r--r-- | drivers/staging/nanohub/main.h | 1 | ||||
-rw-r--r-- | drivers/staging/nanohub/spi.c | 6 | ||||
-rw-r--r-- | include/linux/platform_data/nanohub.h | 1 |
5 files changed, 15 insertions, 2 deletions
diff --git a/Documentation/devicetree/bindings/staging/nanohub.txt b/Documentation/devicetree/bindings/staging/nanohub.txt index 22ef03c312db..aaa2b0999c74 100644 --- a/Documentation/devicetree/bindings/staging/nanohub.txt +++ b/Documentation/devicetree/bindings/staging/nanohub.txt @@ -20,6 +20,7 @@ Example: sensorhub,wakeup-gpio = <&msm_gpio 65 0>; sensorhub,irq1-gpio = <&msm_gpio 66 0>; sensorhub,spi-cs-gpio = <&msm_gpio 43 0>; + sensorhub,bl-max-frequency = <1000000>; sensorhub,bl-addr = <0x08000000>; sensorhub,kernel-addr = <0x0800C000>; sensorhub,shared-addr = <0x08020000>; diff --git a/drivers/staging/nanohub/main.c b/drivers/staging/nanohub/main.c index 976151fa44f2..0d0523f018e2 100644 --- a/drivers/staging/nanohub/main.c +++ b/drivers/staging/nanohub/main.c @@ -56,6 +56,7 @@ #define KTHREAD_WARN_CNT 10 #define WAKEUP_ERR_TIME_NS (60LL * NSEC_PER_SEC) #define WAKEUP_ERR_CNT 4 +#define BL_MAX_SPEED_HZ 1000000 /** * struct gpio_config - this is a binding between platform data and driver data @@ -1404,6 +1405,12 @@ static struct nanohub_platform_data *nanohub_parse_dt(struct device *dev) /* optional (spi) */ pdata->spi_cs_gpio = of_get_named_gpio(dt, "sensorhub,spi-cs-gpio", 0); + /* optional (bl-max-frequency) */ + pdata->bl_max_speed_hz = BL_MAX_SPEED_HZ; + ret = of_property_read_u32(dt, "sensorhub,bl-max-frequency", &u); + if (!ret) + pdata->bl_max_speed_hz = u; + /* optional (stm32f bootloader) */ of_property_read_u32(dt, "sensorhub,bl-addr", &pdata->bl_addr); @@ -1492,6 +1499,7 @@ static struct nanohub_platform_data *nanohub_parse_dt(struct device *dev) if (!pdata) return ERR_PTR(-ENOMEM); + pdata->bl_max_speed_hz = BL_MAX_SPEED_HZ; return pdata; } #endif diff --git a/drivers/staging/nanohub/main.h b/drivers/staging/nanohub/main.h index c3061b89f21f..bbf638bc8164 100644 --- a/drivers/staging/nanohub/main.h +++ b/drivers/staging/nanohub/main.h @@ -63,6 +63,7 @@ struct nanohub_data { const struct nanohub_platform_data *pdata; int irq1; int irq2; + uint32_t max_speed_hz; atomic_t kthread_run; atomic_t thread_state; diff --git a/drivers/staging/nanohub/spi.c b/drivers/staging/nanohub/spi.c index 7fba48f59e0a..46aa76bb2f8b 100644 --- a/drivers/staging/nanohub/spi.c +++ b/drivers/staging/nanohub/spi.c @@ -24,6 +24,7 @@ #define SPI_TIMEOUT 65535 #define SPI_MIN_DMA 48 +#define SPI_MAX_SPEED_HZ 10000000 struct nanohub_spi_data { struct nanohub_data data; @@ -168,7 +169,7 @@ static int spi_bl_open(const void *data) int ret; spi_bus_lock(spi_data->device->master); - spi_data->device->max_speed_hz = 1000000; + spi_data->device->max_speed_hz = spi_data->data.pdata->bl_max_speed_hz; spi_data->device->mode = SPI_MODE_0; spi_data->device->bits_per_word = 8; ret = spi_setup(spi_data->device); @@ -374,7 +375,7 @@ static int nanohub_spi_open(void *data) down(&spi_data->spi_sem); spi_bus_lock(spi_data->device->master); - spi_data->device->max_speed_hz = 10000000; + spi_data->device->max_speed_hz = spi_data->data.max_speed_hz; spi_data->device->mode = SPI_MODE_0; spi_data->device->bits_per_word = 8; ret = spi_setup(spi_data->device); @@ -455,6 +456,7 @@ static int nanohub_spi_probe(struct spi_device *spi) } spi_data->device = spi; + spi_data->data.max_speed_hz = spi->max_speed_hz ? : SPI_MAX_SPEED_HZ; nanohub_spi_comms_init(spi_data); spi_data->data.bl.cmd_erase = CMD_ERASE; diff --git a/include/linux/platform_data/nanohub.h b/include/linux/platform_data/nanohub.h index f3050bdfb3b1..7f8f01d27964 100644 --- a/include/linux/platform_data/nanohub.h +++ b/include/linux/platform_data/nanohub.h @@ -16,6 +16,7 @@ struct nanohub_platform_data { u32 irq1_gpio; u32 irq2_gpio; u32 spi_cs_gpio; + u32 bl_max_speed_hz; u32 bl_addr; u32 num_flash_banks; struct nanohub_flash_bank *flash_banks; |