summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2018-05-29 10:23:33 -0700
committerDmitry Shmidt <dimitrysh@google.com>2018-05-29 15:10:34 -0700
commit1eafbcb7b6fe803aa6b0e07d3514ee791059179a (patch)
tree75391a513282f9e9d585c9384f43be332396ba28
parent18932b51114bf370ed584aeb5dcd9ac6888a5b12 (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.txt1
-rw-r--r--drivers/staging/nanohub/main.c8
-rw-r--r--drivers/staging/nanohub/main.h1
-rw-r--r--drivers/staging/nanohub/spi.c6
-rw-r--r--include/linux/platform_data/nanohub.h1
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;