Re: [PATCH v3 2/6] spi: support simultaneous assertion of multiple CS
Andy Shevchenko <[email protected]>
| Newsgroups | org.kernel.vger.linux-spi,org.kernel.vger.linux-kernel |
|---|---|
| Organization | Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo |
| Message-ID | <[email protected]> |
On Mon, Aug 17, 2026 at 08:32:43PM -0300, Jonathan Santos wrote: > Some SPI controllers allow multiple CS lines to be toggled at the same > time. The existing code always used CS index 0 when tracking the last > active CS in spi_set_cs(), and unconditionally set cs_index_mask to > BIT(0) when parsing DT, both forcing the single CS usage. > > Modify spi_set_cs() to iterate last_cs[] using each logical CS index > instead of always reading index 0. Modify of_spi_parse_dt() to build > cs_index_mask from all parsed CS entries rather than hardcoding BIT(0), > so the controller correctly identifies which CS lines belong to a device > when asserting them simultaneously. > > Board info, ACPI, and ancillary device paths are not updated here. > Board info would require an API change to accept an array of CS values > and is left for a follow-up when we have a use case for this. Ancillary > devices are by design single-CS, so multi-CS is not a current use case for > them. ACPI represents the CS as a 64-bit integer with no established > convention for encoding multiple CS indices yet, so any extension there > would require a separate specification effort. ... > /* > - * By default spi->chip_select[0] will hold the physical CS number, > - * so set bit 0 in spi->cs_index_mask. > + * Set cs_index_mask to indicate which logical CS indices are active. > + * Each bit corresponds to a logical CS index in the spi->chip_select array. > */ > - spi->cs_index_mask = BIT(0); > + for (idx = 0; idx < rc; idx++) > + spi->cs_index_mask |= BIT(idx); Maybe I'm missing something, but isn't it a simple mask, and for-loop is not required? spi->cs_index_mask = BIT(rc + 1) - 1; OR spi->cs_index_mask = GENMASK(rc, 0); // This is better as it supports rc to be 32 or 64 -- With Best Regards, Andy Shevchenko