|
@@ -98,6 +98,18 @@ enum {
|
|
PWMF_EXPORTED = 1 << 2,
|
|
PWMF_EXPORTED = 1 << 2,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * struct pwm_state - state of a PWM channel
|
|
|
|
+ * @period: PWM period (in nanoseconds)
|
|
|
|
+ * @duty_cycle: PWM duty cycle (in nanoseconds)
|
|
|
|
+ * @polarity: PWM polarity
|
|
|
|
+ */
|
|
|
|
+struct pwm_state {
|
|
|
|
+ unsigned int period;
|
|
|
|
+ unsigned int duty_cycle;
|
|
|
|
+ enum pwm_polarity polarity;
|
|
|
|
+};
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* struct pwm_device - PWM channel object
|
|
* struct pwm_device - PWM channel object
|
|
* @label: name of the PWM device
|
|
* @label: name of the PWM device
|
|
@@ -106,10 +118,8 @@ enum {
|
|
* @pwm: global index of the PWM device
|
|
* @pwm: global index of the PWM device
|
|
* @chip: PWM chip providing this PWM device
|
|
* @chip: PWM chip providing this PWM device
|
|
* @chip_data: chip-private data associated with the PWM device
|
|
* @chip_data: chip-private data associated with the PWM device
|
|
- * @period: period of the PWM signal (in nanoseconds)
|
|
|
|
- * @duty_cycle: duty cycle of the PWM signal (in nanoseconds)
|
|
|
|
- * @polarity: polarity of the PWM signal
|
|
|
|
* @args: PWM arguments
|
|
* @args: PWM arguments
|
|
|
|
+ * @state: curent PWM channel state
|
|
*/
|
|
*/
|
|
struct pwm_device {
|
|
struct pwm_device {
|
|
const char *label;
|
|
const char *label;
|
|
@@ -119,13 +129,21 @@ struct pwm_device {
|
|
struct pwm_chip *chip;
|
|
struct pwm_chip *chip;
|
|
void *chip_data;
|
|
void *chip_data;
|
|
|
|
|
|
- unsigned int period;
|
|
|
|
- unsigned int duty_cycle;
|
|
|
|
- enum pwm_polarity polarity;
|
|
|
|
-
|
|
|
|
struct pwm_args args;
|
|
struct pwm_args args;
|
|
|
|
+ struct pwm_state state;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * pwm_get_state() - retrieve the current PWM state
|
|
|
|
+ * @pwm: PWM device
|
|
|
|
+ * @state: state to fill with the current PWM state
|
|
|
|
+ */
|
|
|
|
+static inline void pwm_get_state(const struct pwm_device *pwm,
|
|
|
|
+ struct pwm_state *state)
|
|
|
|
+{
|
|
|
|
+ *state = pwm->state;
|
|
|
|
+}
|
|
|
|
+
|
|
static inline bool pwm_is_enabled(const struct pwm_device *pwm)
|
|
static inline bool pwm_is_enabled(const struct pwm_device *pwm)
|
|
{
|
|
{
|
|
return test_bit(PWMF_ENABLED, &pwm->flags);
|
|
return test_bit(PWMF_ENABLED, &pwm->flags);
|
|
@@ -134,23 +152,31 @@ static inline bool pwm_is_enabled(const struct pwm_device *pwm)
|
|
static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)
|
|
static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)
|
|
{
|
|
{
|
|
if (pwm)
|
|
if (pwm)
|
|
- pwm->period = period;
|
|
|
|
|
|
+ pwm->state.period = period;
|
|
}
|
|
}
|
|
|
|
|
|
static inline unsigned int pwm_get_period(const struct pwm_device *pwm)
|
|
static inline unsigned int pwm_get_period(const struct pwm_device *pwm)
|
|
{
|
|
{
|
|
- return pwm ? pwm->period : 0;
|
|
|
|
|
|
+ struct pwm_state state;
|
|
|
|
+
|
|
|
|
+ pwm_get_state(pwm, &state);
|
|
|
|
+
|
|
|
|
+ return state.period;
|
|
}
|
|
}
|
|
|
|
|
|
static inline void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty)
|
|
static inline void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty)
|
|
{
|
|
{
|
|
if (pwm)
|
|
if (pwm)
|
|
- pwm->duty_cycle = duty;
|
|
|
|
|
|
+ pwm->state.duty_cycle = duty;
|
|
}
|
|
}
|
|
|
|
|
|
static inline unsigned int pwm_get_duty_cycle(const struct pwm_device *pwm)
|
|
static inline unsigned int pwm_get_duty_cycle(const struct pwm_device *pwm)
|
|
{
|
|
{
|
|
- return pwm ? pwm->duty_cycle : 0;
|
|
|
|
|
|
+ struct pwm_state state;
|
|
|
|
+
|
|
|
|
+ pwm_get_state(pwm, &state);
|
|
|
|
+
|
|
|
|
+ return state.duty_cycle;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -160,7 +186,11 @@ int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity);
|
|
|
|
|
|
static inline enum pwm_polarity pwm_get_polarity(const struct pwm_device *pwm)
|
|
static inline enum pwm_polarity pwm_get_polarity(const struct pwm_device *pwm)
|
|
{
|
|
{
|
|
- return pwm ? pwm->polarity : PWM_POLARITY_NORMAL;
|
|
|
|
|
|
+ struct pwm_state state;
|
|
|
|
+
|
|
|
|
+ pwm_get_state(pwm, &state);
|
|
|
|
+
|
|
|
|
+ return state.polarity;
|
|
}
|
|
}
|
|
|
|
|
|
static inline void pwm_get_args(const struct pwm_device *pwm,
|
|
static inline void pwm_get_args(const struct pwm_device *pwm,
|