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
					
				
					 3 changed files with 25 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -45,6 +45,8 @@
 | 
			
		|||
#define REG_MOTION_BURST   0x63
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
static bool powered_down = false;
 | 
			
		||||
 | 
			
		||||
void adns5050_init(void) {
 | 
			
		||||
    // Initialize the ADNS serial pins.
 | 
			
		||||
    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.
 | 
			
		||||
    wait_ms(55);
 | 
			
		||||
 | 
			
		||||
    powered_down = false;
 | 
			
		||||
 | 
			
		||||
    // read a burst from the adns and then discard it.
 | 
			
		||||
    // gets the adns ready for write commands
 | 
			
		||||
    // (for example, setting the dpi).
 | 
			
		||||
| 
						 | 
				
			
			@ -163,6 +167,10 @@ report_adns5050_t adns5050_read_burst(void) {
 | 
			
		|||
    data.dx = 0;
 | 
			
		||||
    data.dy = 0;
 | 
			
		||||
 | 
			
		||||
    if (powered_down) {
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    adns5050_serial_write(REG_MOTION_BURST);
 | 
			
		||||
 | 
			
		||||
    // 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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
int8_t            convert_twoscomp(uint8_t data);
 | 
			
		||||
bool              adns5050_check_signature(void);
 | 
			
		||||
void              adns5050_power_down(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,3 +20,12 @@
 | 
			
		|||
 | 
			
		||||
// Dummy
 | 
			
		||||
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…
	
	Add table
		Add a link
		
	
		Reference in a new issue