O primeiro patch

Alterações no Kernel e envio do código

Postado por Bianca Galvão em 22 de Abril, 2025

Ao revisar o driver do magnetômetro MMC35240, eu e a Júlia percebemos que as funções responsáveis por indicar quais registradores eram “writeable” e quais eram “volatile” repetiam exatamente a mesma lógica, diferenciando-se apenas pela inversão do resultado. A partir disso, discutimos duas abordagens: criar uma única função com parâmetro extra (char ou enum) ou extrair o teste “é registrador de controle” para um helper booleano e, a partir dele, definir as duas funções originais. Optamos pela segunda solução, que manteria o código mais legível e simples.

Implementamos o helper mmc35240_reg_check(unsigned int reg), que retorna verdadeiro apenas se o registrador for CTRL0 ou CTRL1. Em seguida refatoramos mmc35240_is_writeable_reg() para simplesmente chamar esse helper e mmc35240_is_volatile_reg() para retornar o inverso do helper. Com isso, eliminamos dois blocos de switch duplicados e centralizamos a lista de registradores especiais em um único ponto.

Então, executamos um rebuild completo do kernel e validamos que não havia erros de compilação. Em seguida, preparamos a mensagem de commit seguindo o estilo do subsistema IIO, adicionamos as linhas Signed-off-by e Co-developed-by. Por fim, geramos o patch e compartilhamos o rascunho com o email freesoftware2025@gmail.com para última revisão e deixamos tudo pronto para envio à lista de manutenção do kernel.

Segue o email enviado:

From: Bianca Costa Galvão <biancagalvao@usp.br>

Refactor 'mmc35240_is_volatile_reg' and 'mmc35240_is_writeable_reg' as they share similar logic, returning the inverse of each other.

Introduce a new helper function 'mmc35240_reg_check' to generalize this behavior, which is then used by both 'mmc35240_is_volatile_reg' and 'mmc35240_is_writeable_reg'.

Signed-off-by: Bianca Costa Galvão <biancagalvao@usp.br>

Co-developed-by: Júlia Calixto Rosa <juliacalixtorosa@usp.br>

---

drivers/iio/magnetometer/mmc35240.c | 21 +++++++--------------

1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/drivers/iio/magnetometer/mmc35240.c b/drivers/iio/magnetometer/mmc35240.c

index e08a57cd6de2..07f58567e521 100644

--- a/drivers/iio/magnetometer/mmc35240.c

+++ b/drivers/iio/magnetometer/mmc35240.c

@@ -418,15 +418,14 @@ static const struct iio_info mmc35240_info = {

.attrs = &mmc35240_attribute_group,

};

+static bool mmc35240_reg_check(unsigned int reg)

+{

+ return reg == MMC35240_REG_CTRL0 || reg == MMC35240_REG_CTRL1;

+}

+

static bool mmc35240_is_writeable_reg(struct device *dev, unsigned int reg)

{

- switch (reg) {

- case MMC35240_REG_CTRL0:

- case MMC35240_REG_CTRL1:

- return true;

- default:

- return false;

- }

+ return mmc35240_reg_check(reg);

}

static bool mmc35240_is_readable_reg(struct device *dev, unsigned int reg)

@@ -448,13 +447,7 @@ static bool mmc35240_is_readable_reg(struct device *dev, unsigned int reg)

static bool mmc35240_is_volatile_reg(struct device *dev, unsigned int reg)

{

- switch (reg) {

- case MMC35240_REG_CTRL0:

- case MMC35240_REG_CTRL1:

- return false;

- default:

- return true;

- }

+ return !mmc35240_reg_check(reg);

}

static const struct reg_default mmc35240_reg_defaults[] = {

Com isso, fizemos nossa primeira tentativa de alteração no código do Kernel.