Add ability to poweroff ADNS5050 sensor (#24223)
* Add ability to poweroff ADNS5050 sensor * ploopyco/trackball_nano: Poweroff ADNS5050 on suspend
This commit is contained in:
		
							parent
							
								
									df5800b6c4
								
							
						
					
					
						commit
						cc3bc2af11
					
				| @ -45,6 +45,8 @@ | |||||||
| #define REG_MOTION_BURST   0x63 | #define REG_MOTION_BURST   0x63 | ||||||
| // clang-format on
 | // clang-format on
 | ||||||
| 
 | 
 | ||||||
|  | static bool powered_down = false; | ||||||
|  | 
 | ||||||
| void adns5050_init(void) { | void adns5050_init(void) { | ||||||
|     // Initialize the ADNS serial pins.
 |     // Initialize the ADNS serial pins.
 | ||||||
|     gpio_set_pin_output(ADNS5050_SCLK_PIN); |     gpio_set_pin_output(ADNS5050_SCLK_PIN); | ||||||
| @ -59,6 +61,8 @@ void adns5050_init(void) { | |||||||
|     // this ensures that the adns is actuall ready after reset.
 |     // this ensures that the adns is actuall ready after reset.
 | ||||||
|     wait_ms(55); |     wait_ms(55); | ||||||
| 
 | 
 | ||||||
|  |     powered_down = false; | ||||||
|  | 
 | ||||||
|     // read a burst from the adns and then discard it.
 |     // read a burst from the adns and then discard it.
 | ||||||
|     // gets the adns ready for write commands
 |     // gets the adns ready for write commands
 | ||||||
|     // (for example, setting the dpi).
 |     // (for example, setting the dpi).
 | ||||||
| @ -163,6 +167,10 @@ report_adns5050_t adns5050_read_burst(void) { | |||||||
|     data.dx = 0; |     data.dx = 0; | ||||||
|     data.dy = 0; |     data.dy = 0; | ||||||
| 
 | 
 | ||||||
|  |     if (powered_down) { | ||||||
|  |         return data; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     adns5050_serial_write(REG_MOTION_BURST); |     adns5050_serial_write(REG_MOTION_BURST); | ||||||
| 
 | 
 | ||||||
|     // We don't need a minimum tSRAD here. That's because a 4ms wait time is
 |     // We don't need a minimum tSRAD here. That's because a 4ms wait time is
 | ||||||
| @ -211,3 +219,10 @@ bool adns5050_check_signature(void) { | |||||||
| 
 | 
 | ||||||
|     return (pid == 0x12 && rid == 0x01 && pid2 == 0x26); |     return (pid == 0x12 && rid == 0x01 && pid2 == 0x26); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void adns5050_power_down(void) { | ||||||
|  |     if (!powered_down) { | ||||||
|  |         powered_down = true; | ||||||
|  |         adns5050_write_reg(REG_MOUSE_CONTROL, 0b10); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
| @ -83,3 +83,4 @@ void              adns5050_set_cpi(uint16_t cpi); | |||||||
| uint16_t          adns5050_get_cpi(void); | uint16_t          adns5050_get_cpi(void); | ||||||
| int8_t            convert_twoscomp(uint8_t data); | int8_t            convert_twoscomp(uint8_t data); | ||||||
| bool              adns5050_check_signature(void); | bool              adns5050_check_signature(void); | ||||||
|  | void              adns5050_power_down(void); | ||||||
|  | |||||||
| @ -20,3 +20,12 @@ | |||||||
| 
 | 
 | ||||||
| // Dummy
 | // Dummy
 | ||||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {{{ KC_NO }}}; | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {{{ KC_NO }}}; | ||||||
|  | 
 | ||||||
|  | void suspend_power_down_user(void) { | ||||||
|  |     // Switch off sensor + LED making trackball unable to wake host
 | ||||||
|  |     adns5050_power_down(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void suspend_wakeup_init_user(void) { | ||||||
|  |     adns5050_init(); | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user