On Mon, Jan 30, 2023 at 09:59:30PM +0100, Levente Révész wrote: > Hi All, > > The pca953x driver supports many chips. These all have the basic 4 > registers: input, output, invert and direction. Most of them have > additional registers for various functions, like pull-up and > pull-down control, interrupt status and mask, hardware debounce. > > Different chip types have various register layouts. These layouts differ > even in the basic 4 registers. > > This patch series > > 1. Cleans up chip type handling, and > 2. Replaces register address calculations. The proposed scheme > works with every register of every chip type. > > These changes make it possible to add support for extended functions for > more chip types, including: > > * Interrupt mask for PCA950X, PCA9698, PCA957X and XRA120X > * Interrupt status for PCA957X and XRA120X > * Bias for PCA957X and XRA120X > * Debounce for PCAL65XX and XRA120X > > References: > 1. Previous discussion about the chip types > https://lore.kernel.org/linux-gpio/Y1q52efyv93%2Fz8BC@xxxxxxxxxxxxxxxxxx/ > 2. An overview of pca953x chip types > https://lore.kernel.org/linux-gpio/67bba210-09ac-32fb-bb97-8bfc40c2c200@xxxxxxxxxx/ Now as I'm thinking more of your nice job, it may be less effort to everybody if you start from moving the driver to be a real pin control driver united with GPIO handling. That said, start drivers/pinctrl/pinctrl-pca953x.c from scratch with all your ideas in it. To make it better for review and testing, split by series in which you add the main chip family, i.e. PCA953x one (without interrupt?) and then adding each type one-by-one. Also prepare some documentation file in Documentation/...gpio.../pca953x or start a brand new pinctrl folder (we do not have it yet) where you describe all your research. Note, this will be quite useful to enable PWM support later on for some chips. -- With Best Regards, Andy Shevchenko