Merge tag 'counter-fixes-for-6.6a' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 2 Oct 2023 11:13:15 +0000 (13:13 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 2 Oct 2023 11:13:15 +0000 (13:13 +0200)
William writes:

First set of Counter fixes for 6.6

The counter_get_ext() function would incorrectly refer to the first
element of the extensions array to handle component array extensions
when they are located at a different index; a fix is provided to index
to the correct element in the array for this case. A fix for the
microchip-tcb-capture is provided as well to correct an inverted
internal GCLK logic for clock selection.

* tag 'counter-fixes-for-6.6a' of git://git.kernel.org/pub/scm/linux/kernel/git/wbg/counter:
  counter: microchip-tcb-capture: Fix the use of internal GCLK logic
  counter: chrdev: fix getting array extensions

drivers/counter/counter-chrdev.c
drivers/counter/microchip-tcb-capture.c

index 80acdf6..afc94d0 100644 (file)
@@ -247,8 +247,8 @@ static int counter_get_ext(const struct counter_comp *const ext,
                if (*id == component_id)
                        return 0;
 
-               if (ext->type == COUNTER_COMP_ARRAY) {
-                       element = ext->priv;
+               if (ext[*ext_idx].type == COUNTER_COMP_ARRAY) {
+                       element = ext[*ext_idx].priv;
 
                        if (component_id - *id < element->length)
                                return 0;
index 975e431..b3e615c 100644 (file)
@@ -97,7 +97,7 @@ static int mchp_tc_count_function_write(struct counter_device *counter,
                priv->qdec_mode = 0;
                /* Set highest rate based on whether soc has gclk or not */
                bmr &= ~(ATMEL_TC_QDEN | ATMEL_TC_POSEN);
-               if (priv->tc_cfg->has_gclk)
+               if (!priv->tc_cfg->has_gclk)
                        cmr |= ATMEL_TC_TIMER_CLOCK2;
                else
                        cmr |= ATMEL_TC_TIMER_CLOCK1;