From nobody Fri Apr 3 06:02:44 2026 Received: from mail-yw1-f172.google.com (mail-yw1-f172.google.com [209.85.128.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E3F73009EE for ; Wed, 18 Feb 2026 04:37:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771389473; cv=none; b=D9DJX4BmZgW5Jpw1dfJVB7sxiWflZsb6q7e5YsMiPEK5Vr0idVhZTxIUo0TlEcG6eKWoavJ21Z2j9AaXoBfEJDJHnbxQa0O1UDxss2M9bbzw/0V1B2ShkWHqfv5NfktDpI7Gp2tv6SNB9L6SUu2S/r9Vc1EbVj0K7spGA8HyKVQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771389473; c=relaxed/simple; bh=r1xsUjm742lN5OcNZYcSGZWAnGyO898ssLDUm4GqBiY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UctAkTyEr7cQSIbB3M54fa2l6YBWYaAPfNBoHTmhswchOv7tyB25dJhpsUVY2WagkSn0/7obrMpm3X0yLHIZzV1KQiMWpvJnbvZpwyW8VqIqRBZPfYfuf0RNVFdoKyJ9ZIpe4J/w8Ivc1wk/+dsx2jTvdi7sxn5C4oavVFlum3g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kTkTX8cF; arc=none smtp.client-ip=209.85.128.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kTkTX8cF" Received: by mail-yw1-f172.google.com with SMTP id 00721157ae682-790992528f6so42244797b3.1 for ; Tue, 17 Feb 2026 20:37:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771389471; x=1771994271; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TPEJTZQlZV/DMKRq+dAsxYEtRl3v2k/3xpS3no/6kB0=; b=kTkTX8cFWNjOQJK/wYtnCEroTXXWVuWYSKZcgHIy2WIw5cbmHYXy9CGhn7J1xF2xb7 XFXQFqUGe8ivWwJvWL6YmvsZWb7CA4gRY29/xajNhn5fF/t3FiqpUhegYjQggUnNSilo XzdzDetPWfli4jUKplQ9mh2BSRF4HPrbb4o+ChWa0MOki7rV7OXhILdNR2rrqw/DsZAd I3ujgX0A28MXD/NSz63RIoUCDnvf5ZT2bdvD3fjICdHJbPTICEy4ucjVfPLsGS3TaYBG n3fulTX6HngHRJl4Es6CqN2QbD77Ugn+co3JZMe/fskiXQFi7FlTBrW4wKZA2Bjp/6k1 IemA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771389471; x=1771994271; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=TPEJTZQlZV/DMKRq+dAsxYEtRl3v2k/3xpS3no/6kB0=; b=ev1eK2zDNc8x1qLFZ13g4n5RlL9EwxaI/+qw9vMFnlQBwXgFbnvC3S/OQeXQV8wv7M 5hlKlu+44d6dOzWhqCbFAZy4bgbiX3v5tgUVKLq2LkGkDl1H1jlXpFa5KPuLlZ+rjPo+ Eg6tJFADB6bfiWgpX9he7DKWz5oVV9oGm8agBkINcL87+DBp+07Uv2xCx1gd/lxN5Wu8 /j+gNkH726bWP1bPf5LxWiT4AnNaolHQc0kgvYVnp3eTE0imEhDeoZlSnWvZWRqU5f+X Yq+7LNz5TFYSgeWuZO9oOj8ViQWCM95dIanCE/5F+Y+LWS/NbIGYKhaVo6EIVgR+/LZZ ODuA== X-Forwarded-Encrypted: i=1; AJvYcCVNEYyYPIZE0F8WnMOLXD7lVHvWyDuhVMQ14cMNnaVcJPnnzkTN4vC3JLaSbgwzktbAWuu/CNSmOYB0q1M=@vger.kernel.org X-Gm-Message-State: AOJu0YxnbYGuX6/v5Nc/xKTRV/AFhUXMYogc0TQ4XymKkBgDUs2l8JD+ Ss573b+2qI0ReLMiqd/8kAlCDi3bDGbfYjvy3iRTK5+BFmIKVL1ZnNU2 X-Gm-Gg: AZuq6aLq72cZSzb8MiKWYP1Fd7lLXPrxQxjt/icDLHRxFwjqZLgdv6AlqHuqWLfd2P2 4sZuR8gn3aun3PDnug8lXmT3ltMSYbJ7FcIfHbuQf/1lIAK/NVTxYNBfgW4vYzq/i6DSeFLeOVG HueZ7VYZNp6Q5Kxp7a7sUkQDJZZLsZnYhPJcL7+qd6X9GndN7bXu/q8UqL2ad2c/51ufcryJBXm zSwsrOrdIwKPwpWPyv5DMb7DzMG1MfYNNADw8FGiBQmjmw9D2L8WM8TLd60TyVQ9oXkdx2Zsmyh MqZ+ANFG0fz/BMkOGBFR0OzT7i67cnWsyg48Fea8balWFJIS6oA0FuOyAVtDJmdAwLmakw55CkJ QMS8x96zWZGw/aJBToMLnX2qd4Xb2Ocb0N0wkeQEF42Yz74qh38IdBc8QgmmMQ0U3TQab7Mktcv 4bfkLebOpDeYLEY4JquBA4wlBXp8MvZJHKQGyW/Jl0qnG1wyKIGltB8CnjQv0F+oTNE/f2hFE1i IAPQlQacez7d4eu9evh6Ds6JTYjelLNO0WzOjz6td4= X-Received: by 2002:a05:690c:4c01:b0:794:78d0:9b57 with SMTP id 00721157ae682-797f71ca8eamr5810567b3.16.1771389471041; Tue, 17 Feb 2026 20:37:51 -0800 (PST) Received: from tux ([2601:7c0:c37c:4c00:e3a8:26f7:7e08:88e1]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7966c23e4bdsm119850617b3.32.2026.02.17.20.37.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Feb 2026 20:37:50 -0800 (PST) From: Ethan Tidmore To: jic23@kernel.org, andy@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Andy Shevchenko , Ethan Tidmore Subject: [PATCH v4 5/9] iio: light: gp2ap020a00f: Return directly from the switch cases Date: Tue, 17 Feb 2026 22:37:24 -0600 Message-ID: <20260218043728.609659-6-ethantidmore06@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260218043728.609659-1-ethantidmore06@gmail.com> References: <20260218043728.609659-1-ethantidmore06@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko Return directly from the switch cases which makes code easier to follow. In some cases convert pieces to the standard pattern which also unifies it with the accepted kernel practices. By doing this, it appears to have fixed a preexisting bug, the variable err in gp2ap020a00f_buffer_predisable() is only checked once for errors after the for loop is finished. This could allow errors to be swallowed. Signed-off-by: Andy Shevchenko Signed-off-by: Ethan Tidmore --- v4: - Integrate Andy Shevchenko's cleanups. drivers/iio/light/gp2ap020a00f.c | 96 ++++++++++++-------------------- 1 file changed, 37 insertions(+), 59 deletions(-) diff --git a/drivers/iio/light/gp2ap020a00f.c b/drivers/iio/light/gp2ap020a= 00f.c index 4afdd22499f3..f9ff8bbbe5ec 100644 --- a/drivers/iio/light/gp2ap020a00f.c +++ b/drivers/iio/light/gp2ap020a00f.c @@ -494,27 +494,24 @@ static int gp2ap020a00f_alter_opmode(struct gp2ap020a= 00f_data *data, static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_data *data, enum gp2ap020a00f_cmd cmd) { - int err =3D 0; + int err; =20 switch (cmd) { case GP2AP020A00F_CMD_READ_RAW_CLEAR: if (data->cur_opmode !=3D GP2AP020A00F_OPMODE_SHUTDOWN) return -EBUSY; - err =3D gp2ap020a00f_set_operation_mode(data, + return gp2ap020a00f_set_operation_mode(data, GP2AP020A00F_OPMODE_READ_RAW_CLEAR); - break; case GP2AP020A00F_CMD_READ_RAW_IR: if (data->cur_opmode !=3D GP2AP020A00F_OPMODE_SHUTDOWN) return -EBUSY; - err =3D gp2ap020a00f_set_operation_mode(data, + return gp2ap020a00f_set_operation_mode(data, GP2AP020A00F_OPMODE_READ_RAW_IR); - break; case GP2AP020A00F_CMD_READ_RAW_PROXIMITY: if (data->cur_opmode !=3D GP2AP020A00F_OPMODE_SHUTDOWN) return -EBUSY; - err =3D gp2ap020a00f_set_operation_mode(data, + return gp2ap020a00f_set_operation_mode(data, GP2AP020A00F_OPMODE_READ_RAW_PROXIMITY); - break; case GP2AP020A00F_CMD_TRIGGER_CLEAR_EN: if (data->cur_opmode =3D=3D GP2AP020A00F_OPMODE_PROX_DETECT) return -EBUSY; @@ -522,16 +519,17 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_= data *data, err =3D gp2ap020a00f_alter_opmode(data, GP2AP020A00F_OPMODE_ALS, GP2AP020A00F_ADD_MODE); + else + err =3D 0; set_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags); - break; + return err; case GP2AP020A00F_CMD_TRIGGER_CLEAR_DIS: clear_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags); if (gp2ap020a00f_als_enabled(data)) break; - err =3D gp2ap020a00f_alter_opmode(data, + return gp2ap020a00f_alter_opmode(data, GP2AP020A00F_OPMODE_ALS, GP2AP020A00F_SUBTRACT_MODE); - break; case GP2AP020A00F_CMD_TRIGGER_IR_EN: if (data->cur_opmode =3D=3D GP2AP020A00F_OPMODE_PROX_DETECT) return -EBUSY; @@ -539,16 +537,17 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_= data *data, err =3D gp2ap020a00f_alter_opmode(data, GP2AP020A00F_OPMODE_ALS, GP2AP020A00F_ADD_MODE); + else + err =3D 0; set_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags); - break; + return err; case GP2AP020A00F_CMD_TRIGGER_IR_DIS: clear_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags); if (gp2ap020a00f_als_enabled(data)) break; - err =3D gp2ap020a00f_alter_opmode(data, + return gp2ap020a00f_alter_opmode(data, GP2AP020A00F_OPMODE_ALS, GP2AP020A00F_SUBTRACT_MODE); - break; case GP2AP020A00F_CMD_TRIGGER_PROX_EN: if (data->cur_opmode =3D=3D GP2AP020A00F_OPMODE_PROX_DETECT) return -EBUSY; @@ -556,13 +555,12 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_= data *data, GP2AP020A00F_OPMODE_PS, GP2AP020A00F_ADD_MODE); set_bit(GP2AP020A00F_FLAG_PROX_TRIGGER, &data->flags); - break; + return err; case GP2AP020A00F_CMD_TRIGGER_PROX_DIS: clear_bit(GP2AP020A00F_FLAG_PROX_TRIGGER, &data->flags); - err =3D gp2ap020a00f_alter_opmode(data, + return gp2ap020a00f_alter_opmode(data, GP2AP020A00F_OPMODE_PS, GP2AP020A00F_SUBTRACT_MODE); - break; case GP2AP020A00F_CMD_ALS_HIGH_EV_EN: if (test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags)) return 0; @@ -576,9 +574,8 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_da= ta *data, return err; } set_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags); - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_TH, true); - break; case GP2AP020A00F_CMD_ALS_HIGH_EV_DIS: if (!test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags)) return 0; @@ -590,9 +587,8 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_da= ta *data, if (err < 0) return err; } - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_TH, false); - break; case GP2AP020A00F_CMD_ALS_LOW_EV_EN: if (test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags)) return 0; @@ -606,9 +602,8 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_da= ta *data, return err; } set_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags); - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_TL, true); - break; case GP2AP020A00F_CMD_ALS_LOW_EV_DIS: if (!test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags)) return 0; @@ -620,9 +615,8 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_da= ta *data, if (err < 0) return err; } - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_TL, false); - break; case GP2AP020A00F_CMD_PROX_HIGH_EV_EN: if (test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags)) return 0; @@ -636,9 +630,8 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_da= ta *data, return err; } set_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags); - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_PH, true); - break; case GP2AP020A00F_CMD_PROX_HIGH_EV_DIS: if (!test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags)) return 0; @@ -647,9 +640,8 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_da= ta *data, GP2AP020A00F_OPMODE_SHUTDOWN); if (err < 0) return err; - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_PH, false); - break; case GP2AP020A00F_CMD_PROX_LOW_EV_EN: if (test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags)) return 0; @@ -663,9 +655,8 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_da= ta *data, return err; } set_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags); - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_PL, true); - break; case GP2AP020A00F_CMD_PROX_LOW_EV_DIS: if (!test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags)) return 0; @@ -674,12 +665,11 @@ static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_= data *data, GP2AP020A00F_OPMODE_SHUTDOWN); if (err < 0) return err; - err =3D gp2ap020a00f_write_event_threshold(data, + return gp2ap020a00f_write_event_threshold(data, GP2AP020A00F_THRESH_PL, false); - break; } =20 - return err; + return 0; } =20 static int wait_conversion_complete_irq(struct gp2ap020a00f_data *data) @@ -1007,10 +997,8 @@ static int gp2ap020a00f_get_thresh_reg(const struct i= io_chan_spec *chan, else return GP2AP020A00F_TL_L_REG; default: - break; + return -EINVAL; } - - return -EINVAL; } =20 static int gp2ap020a00f_write_event_val(struct iio_dev *indio_dev, @@ -1182,33 +1170,23 @@ static int gp2ap020a00f_read_event_config(struct ii= o_dev *indio_dev, enum iio_event_direction dir) { struct gp2ap020a00f_data *data =3D iio_priv(indio_dev); - int event_en =3D 0; =20 guard(mutex)(&data->lock); =20 switch (chan->type) { case IIO_PROXIMITY: if (dir =3D=3D IIO_EV_DIR_RISING) - event_en =3D test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, - &data->flags); + return test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags); else - event_en =3D test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, - &data->flags); - break; + return test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags); case IIO_LIGHT: if (dir =3D=3D IIO_EV_DIR_RISING) - event_en =3D test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, - &data->flags); + return test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags); else - event_en =3D test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, - &data->flags); - break; + return test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags); default: - event_en =3D -EINVAL; - break; + return -EINVAL; } - - return event_en; } =20 static int gp2ap020a00f_read_channel(struct gp2ap020a00f_data *data, @@ -1366,7 +1344,7 @@ static const struct iio_info gp2ap020a00f_info =3D { static int gp2ap020a00f_buffer_postenable(struct iio_dev *indio_dev) { struct gp2ap020a00f_data *data =3D iio_priv(indio_dev); - int i, err =3D 0; + int i, err; =20 guard(mutex)(&data->lock); =20 @@ -1400,15 +1378,15 @@ static int gp2ap020a00f_buffer_postenable(struct ii= o_dev *indio_dev) =20 data->buffer =3D kmalloc(indio_dev->scan_bytes, GFP_KERNEL); if (!data->buffer) - err =3D -ENOMEM; + return -ENOMEM; =20 - return err; + return 0; } =20 static int gp2ap020a00f_buffer_predisable(struct iio_dev *indio_dev) { struct gp2ap020a00f_data *data =3D iio_priv(indio_dev); - int i, err =3D 0; + int i, err; =20 guard(mutex)(&data->lock); =20 @@ -1427,12 +1405,12 @@ static int gp2ap020a00f_buffer_predisable(struct ii= o_dev *indio_dev) GP2AP020A00F_CMD_TRIGGER_PROX_DIS); break; } + if (err) + return err; } =20 - if (err =3D=3D 0) - kfree(data->buffer); - - return err; + kfree(data->buffer); + return 0; } =20 static const struct iio_buffer_setup_ops gp2ap020a00f_buffer_setup_ops =3D= { --=20 2.53.0