diff options
author | Drashna Jaelre <drashna@live.com> | 2022-01-10 14:57:36 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-10 14:57:36 -0800 |
commit | ec7c3ac12dbc355218bae9c392e96b8d513fb95d (patch) | |
tree | 0c38c1b28697c242fc3b8c573dbd7625cf18aba2 | |
parent | 2fbdfae4b740a7b274ceb73cd29de76755fe1542 (diff) | |
download | qmk_firmware-ec7c3ac12dbc355218bae9c392e96b8d513fb95d.tar.gz qmk_firmware-ec7c3ac12dbc355218bae9c392e96b8d513fb95d.zip |
Optimize initialization of PMW3360 Sensor (#15821)
-rw-r--r-- | docs/feature_pointing_device.md | 15 | ||||
-rw-r--r-- | drivers/sensors/pmw3360.c | 4 |
2 files changed, 12 insertions, 7 deletions
diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md index b1015f3cd3..ecf6d5c6d4 100644 --- a/docs/feature_pointing_device.md +++ b/docs/feature_pointing_device.md @@ -144,13 +144,14 @@ The PMW 3360 is an SPI driven optical sensor, that uses a built in IR LED for su | Setting | Description | Default | |-----------------------------|--------------------------------------------------------------------------------------------|---------------| -|`PMW3360_CS_PIN` | (Required) Sets the Cable Select pin connected to the sensor. | _not defined_ | -|`PMW3360_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` | -|`PMW3360_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` | -|`PMW3360_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` | -|`PMW3360_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ | -|`PMW3360_LIFTOFF_DISTANCE` | (Optional) Sets the lift off distance at run time | `0x02` | -|`ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 30 degrees directly in the sensor. | `0` | +|`PMW3360_CS_PIN` | (Required) Sets the Cable Select pin connected to the sensor. | _not defined_ | +|`PMW3360_CLOCK_SPEED` | (Optional) Sets the clock speed that the sensor runs at. | `2000000` | +|`PMW3360_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false` | +|`PMW3360_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` | +|`PMW3360_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ | +|`PMW3360_LIFTOFF_DISTANCE` | (Optional) Sets the lift off distance at run time | `0x02` | +|`ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 127 degrees directly in the sensor. | `0` | +|`PMW3360_LEGACY_FIRMWARE_UPLOAD` | (Optional) Switches to older, manual upload of firmware, for compatibility. | _not defined_ | The CPI range is 100-12000, in increments of 100. Defaults to 1600 CPI. diff --git a/drivers/sensors/pmw3360.c b/drivers/sensors/pmw3360.c index ad0a724ee4..4712f6015c 100644 --- a/drivers/sensors/pmw3360.c +++ b/drivers/sensors/pmw3360.c @@ -209,12 +209,16 @@ void pmw3360_upload_firmware(void) { spi_write(REG_SROM_Load_Burst | 0x80); wait_us(15); +#ifdef PMW3360_LEGACY_FIRMWARE_UPLOAD unsigned char c; for (int i = 0; i < FIRMWARE_LENGTH; i++) { c = (unsigned char)pgm_read_byte(firmware_data + i); spi_write(c); wait_us(15); } +#else + spi_transmit(firmware_data, sizeof(firmware_data)); +#endif wait_us(200); pmw3360_read(REG_SROM_ID); |