Primeira contribuição (tentativa) para o kernel
Para o primeiro problema, fiz a seguinte alteração na função static int ads1119_debugfs_reg_access
:
+ if (!iio_device_claim_direct(indio_dev))
+ return -EBUSY;
O que eu achava que era um problema simples e direto se transformou numa discussão entre maintainers. Eles começaram a me questionar se essa mudança era realmente útil e me jogaram um monte de perguntas sobre detalhes ultraespecíficos do subsistema IIO — e eu simplesmente não fazia a menor ideia do que estavam falando.





Segunda contribuição (tentativa rs) para o kernel
Nessa segunda tentativa, apenas extraí uma parte repetida da função e transformei em uma função separada. Também renomeei algumas variáveis para deixá-las mais claras.
+static int apds9306_get_thresh_reg(int dir)
{
- int var, ret;
- u8 buff[3];
-
if (dir == IIO_EV_DIR_RISING)
- var = APDS9306_ALS_THRES_UP_0_REG;
+ return APDS9306_ALS_THRES_UP_0_REG;
else if (dir == IIO_EV_DIR_FALLING)
- var = APDS9306_ALS_THRES_LOW_0_REG;
+ return APDS9306_ALS_THRES_LOW_0_REG;
else
return -EINVAL;
+}
+static int apds9306_event_thresh_get(struct apds9306_data *data, int dir,
+ int *val)
+{
+ int reg, ret;
+ u8 buff[3];
- ret = regmap_bulk_read(data->regmap, var, buff, sizeof(buff));
+ reg = apds9306_get_thresh_reg(dir);
+ if (reg < 0)
+ return reg;
+
+ ret = regmap_bulk_read(data->regmap, reg, buff, sizeof(buff));
if (ret)
return ret;
}
@@ -769,22 +776,19 @@ static int apds9306_event_thresh_get(struct apds9306_data *data, int dir,
static int apds9306_event_thresh_set(struct apds9306_data *data, int dir,
int val)
{
- int var;
+ int reg;
u8 buff[3];
- if (dir == IIO_EV_DIR_RISING)
- var = APDS9306_ALS_THRES_UP_0_REG;
- else if (dir == IIO_EV_DIR_FALLING)
- var = APDS9306_ALS_THRES_LOW_0_REG;
- else
- return -EINVAL;
+ reg = apds9306_get_thresh_reg(dir);
+ if (reg < 0)
+ return reg;
if (!in_range(val, 0, APDS9306_ALS_THRES_VAL_MAX))
return -EINVAL;
put_unaligned_le24(val, buff);
- return regmap_bulk_write(data->regmap, var, buff, sizeof(buff));
+ return regmap_bulk_write(data->regmap, reg, buff, sizeof(buff));
}
O feedback foi mais amigável (dessa vez o reviewer era o Marcelo Schmitt). Ele apontou alguns erros na minha função, incluindo o fato de que ela adicionava uma comparação desnecessária. OK, justo.
Mas aí… veio outro maintainer com o seguinte comentário:
“Existe um return
com mais de um espaço em branco.”
Detalhe: minha alteração tinha 5 return
s diferentes. Então eu simplesmente ignorei essa mensagem achando que o maintainer estava com mal vontade de dar um feedback decente .
Corrigi tudo, enviei a versão 2. E adivinha? O mesmo cara apontou de novo o mesmo return
. A essa altura, eu já estava questionando minha sanidade.
30 minutos depois, percebi minha burrice. Era só clicar no bendito símbolo de três pontinhos (“⋯”) acima da mensagem dele — isso expandia o trecho exato com o return
com dois espaços em branco. Foi nesse momento que percebi que o buraco era mais embaixo.
Pra finalizar com chave de ouro: fui tentar enviar a versão 3... mas por algum motivo (talvez um bug do kw send-patch
), meu patch V3 foi enviado como resposta do patch V2. Depois disso, ninguém nunca mais me respondeu.
Acho que os maintainers riram da minha cara e decidiram nunca mais perder tempo com a minha "contribuição tão útil".




