mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	pwm: Read initial hardware state at request time
Drivers that support reading the hardware state (using ->get_state()) may want to rely on per-PWM data to do so. Defer reading the hardware state for the first time until the PWM has been requested and after drivers have had a chance to allocate per-PWM data. Conceptually this is also a more natural place to read the hardware state because the PWM core doesn't need to know the hardware state of a PWM unless there is a user for it. This also ensures that the state is read everytime a user requests a PWM. If the PWM changes between users for some reason, the PWM core will reload the state from hardware and keep its copy of the state up-to-date. Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Michal Vokáč <michal.vokac@ysoft.com> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:
		
							parent
							
								
									e42617b825
								
							
						
					
					
						commit
						cfc4c189bc
					
				
					 1 changed files with 3 additions and 3 deletions
				
			
		| 
						 | 
					@ -114,6 +114,9 @@ static int pwm_device_request(struct pwm_device *pwm, const char *label)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (pwm->chip->ops->get_state)
 | 
				
			||||||
 | 
							pwm->chip->ops->get_state(pwm->chip, pwm, &pwm->state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_bit(PWMF_REQUESTED, &pwm->flags);
 | 
						set_bit(PWMF_REQUESTED, &pwm->flags);
 | 
				
			||||||
	pwm->label = label;
 | 
						pwm->label = label;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -283,9 +286,6 @@ int pwmchip_add_with_polarity(struct pwm_chip *chip,
 | 
				
			||||||
		pwm->hwpwm = i;
 | 
							pwm->hwpwm = i;
 | 
				
			||||||
		pwm->state.polarity = polarity;
 | 
							pwm->state.polarity = polarity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (chip->ops->get_state)
 | 
					 | 
				
			||||||
			chip->ops->get_state(chip, pwm, &pwm->state);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		radix_tree_insert(&pwm_tree, pwm->pwm, pwm);
 | 
							radix_tree_insert(&pwm_tree, pwm->pwm, pwm);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue