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.
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQSNN83d4NIlKPjon7a1SFbKvhIjKwUCZPpOEgAKCRC1SFbKvhIj
 KxAlAQCyTD0T0wA4iMegviHRb/Rw66Ae42XzmEUiwCjAPY+F4wD/ZJ5ULT+Tq0fE
 uJJIhrj3vNglngt7rbCboJ2Ve1jyPgs=
 =1Ztq
 -----END PGP SIGNATURE-----

Merge tag 'counter-fixes-for-6.6a' of git://git.kernel.org/pub/scm/linux/kernel/git/wbg/counter into char-misc-linus

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
This commit is contained in:
Greg Kroah-Hartman 2023-10-02 13:13:15 +02:00
commit 5d164a022b
2 changed files with 3 additions and 3 deletions

View 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;

View 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;