On Wed, Jun 09, 2021 at 04:47:31PM +0100, Jonathan Cameron wrote: > On Wed, 9 Jun 2021 10:31:21 +0900 > William Breathitt Gray wrote: > > diff --git a/drivers/counter/stm32-lptimer-cnt.c b/drivers/counter/stm32-lptimer-cnt.c > > index c19d998df5ba..78f383b77bd2 100644 > > --- a/drivers/counter/stm32-lptimer-cnt.c > > +++ b/drivers/counter/stm32-lptimer-cnt.c > > @@ -206,9 +206,10 @@ static int stm32_lptim_cnt_function_set(struct counter_device *counter, > > priv->quadrature_mode = 1; > > priv->polarity = STM32_LPTIM_SYNAPSE_ACTION_BOTH_EDGES; > > return 0; > > + default: > > + /* should never reach this path */ > > + return -EINVAL; > > In this particular case we are already exhaustive. So we should have neither default > nor ideally the return below. > > If we have a local variable of the relevant enum type, then I think the compiler > should be able to tell this is exhaustive and usefully it will then issue > a warning should the enum gain more entries in future. I tried using a local variable of type enum stm32_lptim_cnt_function, but unfortunately the compiler is not able to tell this is exhaustive -- I think it's because 'function' is of type enum counter_function which can theoretically have a value outside enum stm32_lptim_cnt_function. > > > } > > - > > - return -EINVAL; > > } > > > > static ssize_t stm32_lptim_cnt_enable_read(struct counter_device *counter, > > @@ -326,9 +327,10 @@ static int stm32_lptim_cnt_action_get(struct counter_device *counter, > > case STM32_LPTIM_ENCODER_BOTH_EDGE: > > *action = priv->polarity; > > return 0; > > + default: > > Same in this path. > > > + /* should never reach this path */ > > + return -EINVAL; > > } > > - > > - return -EINVAL; > > } > > > > static int stm32_lptim_cnt_action_set(struct counter_device *counter, > > diff --git a/drivers/counter/ti-eqep.c b/drivers/counter/ti-eqep.c > > index 65df9ef5b5bc..878725c2f010 100644 > > --- a/drivers/counter/ti-eqep.c > > +++ b/drivers/counter/ti-eqep.c > > @@ -157,44 +157,39 @@ static int ti_eqep_action_get(struct counter_device *counter, > > * QEPA and QEPB trigger QCLK. > > */ > > *action = TI_EQEP_SYNAPSE_ACTION_BOTH_EDGES; > > - break; > > + return 0; > > case TI_EQEP_COUNT_FUNC_DIR_COUNT: > > /* In direction-count mode only rising edge of QEPA is counted > > * and QEPB gives direction. > > */ > > - switch (synapse->signal->id) { > I'd rather see this as > > case TI_EQEP_SIGNAL_QEPA: > caes TI_EQEP_SIGNAL_QEPB: > > To make it clear what the two cases are. Then we don't need the default > assuming the type is right so the compiler should be able to see > that we have been exhaustive. I can refactor this back to a switch statement as you suggest, but we'll need the default case for the same reason as mentioned above. William Breathitt Gray > > > - case TI_EQEP_SIGNAL_QEPA: > > - *action = TI_EQEP_SYNAPSE_ACTION_RISING_EDGE; > > - break; > > - default: > > + if (synapse->signal->id == TI_EQEP_SIGNAL_QEPB) > > *action = TI_EQEP_SYNAPSE_ACTION_NONE; > > - break; > > - } > > - break; > > + else > > + *action = TI_EQEP_SYNAPSE_ACTION_RISING_EDGE; > > + return 0; > > case TI_EQEP_COUNT_FUNC_UP_COUNT: > > case TI_EQEP_COUNT_FUNC_DOWN_COUNT: > > /* In up/down-count modes only QEPA is counted and QEPB is not > > * used. > > */ > > - switch (synapse->signal->id) { > > - case TI_EQEP_SIGNAL_QEPA: > > - err = regmap_read(priv->regmap16, QDECCTL, &qdecctl); > > - if (err) > > - return err; > > - > > - if (qdecctl & QDECCTL_XCR) > > - *action = TI_EQEP_SYNAPSE_ACTION_BOTH_EDGES; > > - else > > - *action = TI_EQEP_SYNAPSE_ACTION_RISING_EDGE; > > - break; > > - default: > > + if (synapse->signal->id == TI_EQEP_SIGNAL_QEPB) { > > *action = TI_EQEP_SYNAPSE_ACTION_NONE; > > Same as above > > > - break; > > + return 0; > > } > > - break; > > - } > > > > - return 0; > > + err = regmap_read(priv->regmap16, QDECCTL, &qdecctl); > > + if (err) > > + return err; > > + > > + if (qdecctl & QDECCTL_XCR) > > + *action = TI_EQEP_SYNAPSE_ACTION_BOTH_EDGES; > > + else > > + *action = TI_EQEP_SYNAPSE_ACTION_RISING_EDGE; > > + return 0; > > + default: > > + /* should never reach this path */ > > + return -EINVAL; > > + } > > } > > > > static const struct counter_ops ti_eqep_counter_ops = { >