From: Daniel Thompson <daniel.thompson@linaro.org>
To: ChiaEn Wu <peterwu.pub@gmail.com>
Cc: lee.jones@linaro.org, jingoohan1@gmail.com, pavel@ucw.cz,
robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org,
matthias.bgg@gmail.com, sre@kernel.org,
chunfeng.yun@mediatek.com, gregkh@linuxfoundation.org,
jic23@kernel.org, lars@metafoo.de, lgirdwood@gmail.com,
broonie@kernel.org, linux@roeck-us.net,
heikki.krogerus@linux.intel.com, deller@gmx.de,
ChiYuan Huang <cy_huang@richtek.com>,
alice_chen@richtek.com, chiaen_wu@richtek.com,
dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org,
devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org,
linux-pm@vger.kernel.org, linux-usb@vger.kernel.org,
linux-iio@vger.kernel.org, linux-fbdev@vger.kernel.org
Subject: Re: [RESEND 14/14] video: backlight: mt6370: Add Mediatek MT6370 support
Date: Tue, 7 Jun 2022 11:41:36 +0100 [thread overview]
Message-ID: <20220607104136.cfnpwo6ajqiuafbf@maple.lan> (raw)
In-Reply-To: <CABtFH5+-o=cML_VCSY9frJwEU_TnZt0+myJebi8J7BpP+BOqOw@mail.gmail.com>
On Fri, Jun 03, 2022 at 03:14:56AM +0800, ChiaEn Wu wrote:
> Daniel Thompson <daniel.thompson@linaro.org> 於 2022年6月1日 週三 下午5:46寫道:
> >
> > On Tue, May 31, 2022 at 07:19:00PM +0800, ChiaEn Wu wrote:
> > > +#define MT6370_DT_PROP_DECL(_name, _type, _reg, _mask, _max, _inv) \
> > > +{ \
> > > + .name = "mediatek,bled-" #_name, \
> >
> > I'd rather have the whole DT property in the macro (because it helps
> > with grepability).
>
> Do you mean the _name parameter must be the full name of the DT
> property and do not use "#" to concat like following example?
>
> // in declare
> .name = _name,
> // in use
> MT6370_DT_PROP_DECL(mediatek,bled-pwm-enable, ......)
Yes, I would prefer this form, although, as discussed below, I don't really
like MT6370_DT_PROP_DECL().
> > > + .type = MT6370_PARSE_TYPE_##_type, \
> > > + .reg = _reg, \
> > > + .mask = _mask, \
> > > + .max_val = _max, \
> > > + .invert = _inv, \
> > > +}
> > > +
> > > +static int mt6370_init_backlight_properties(struct mt6370_priv *priv,
> > > + struct backlight_properties *props)
> > > +{
> > > + struct device *dev = priv->dev;
> > > + u8 prop_val;
> > > + u32 brightness;
> > > + unsigned int mask, val;
> > > + static const struct {
> > > + char *name;
> > > + enum mt6370_prop_type type;
> > > + unsigned int reg;
> > > + unsigned int mask;
> > > + u8 max_val;
> > > + bool invert;
> > > + } vendor_opt_props[] = {
> > > + MT6370_DT_PROP_DECL(pwm-enable, BOOL, MT6370_REG_BL_PWM,
> > > + MT6370_BL_PWM_EN_MASK, 1, false),
> > > + MT6370_DT_PROP_DECL(pwm-hys-enable, BOOL, MT6370_REG_BL_PWM,
> > > + MT6370_BL_PWM_HYS_EN_MASK, 1, false),
> > > + MT6370_DT_PROP_DECL(pwm-hys-sel, U8, MT6370_REG_BL_PWM,
> > > + MT6370_BL_PWM_HYS_SEL_MASK, 3, false),
> > > + MT6370_DT_PROP_DECL(ovp-level-sel, U8, MT6370_REG_BL_BSTCTRL,
> > > + MT6370_BL_OVP_SEL_MASK, 3, false),
> > > + MT6370_DT_PROP_DECL(ovp-shutdown, BOOL, MT6370_REG_BL_BSTCTRL,
> > > + MT6370_BL_OVP_EN_MASK, 1, true),
> > > + MT6370_DT_PROP_DECL(ocp-level-sel, U8, MT6370_REG_BL_BSTCTRL,
> > > + MT6370_BL_OC_SEL_MASK, 3, false),
> > > + MT6370_DT_PROP_DECL(ocp-shutdown, BOOL, MT6370_REG_BL_BSTCTRL,
> > > + MT6370_BL_OC_EN_MASK, 1, true),
> > > + }, *prop_now;
> > > + int i, ret;
> > > +
> > > + /* vendor optional properties */
> > > + for (i = 0; i < ARRAY_SIZE(vendor_opt_props); i++) {
> > > + prop_now = vendor_opt_props + i;
> > > +
> > > + switch (prop_now->type) {
> > > + case MT6370_PARSE_TYPE_BOOL:
> > > + if (device_property_read_bool(dev, prop_now->name))
> > > + val = 1;
> > > + else
> > > + val = 0;
> > > + break;
> > > + case MT6370_PARSE_TYPE_U8:
> > > + ret = device_property_read_u8(dev, prop_now->name,
> > > + &prop_val);
> > > + /* Property not exist, keep value in default */
> > > + if (ret)
> > > + continue;
> > > +
> > > + val = min_t(u8, prop_val, prop_now->max_val);
> > > + break;
> > > + default:
> > > + return -EINVAL;
> > > + }
> > > +
> > > + if (prop_now->invert)
> > > + val = prop_now->max_val - val;
> > > +
> > > + val <<= ffs(prop_now->mask) - 1;
> > > +
> > > + ret = regmap_update_bits(priv->regmap, prop_now->reg,
> > > + prop_now->mask, val);
> > > + if (ret)
> > > + return ret;
> > > + }
> >
> > Is it really worth all this tricky code for 7 properties?
> >
> > The code would be much easier to read and maintain if it were coded
> > directly. For example, the inverted boolean code is hard to read and
> > can be written directly as:
> >
> >
> > val = device_property_read_bool(dev, "mediatek,bled-ovp_shutdown");
> > ret = regmap_update_bits(priv->regmap, MT6370_REG_BL_BST_CTRL,
> > MT6370_BL_OVP_EN_MASK,
> > MT6370_BL_OVP_EN_MASK * !val);
> > if (ret)
> > return ret;
> >
> > The direct coded approach will probably also pay off if you switch
> > the bindings over to microvolts/microamps since it becomes much more
> > natural to call out to a lookup function to convert it into a register
> > value.
> >
>
> The purpose of my code is trying to avoid the repeat code in this
> function. And for loop can help to decrease the lines of code
> effectively, that's why I use these code to parse the DT properties.
I'm not really convinced that is uses fewer lines of code. It
certainly would if there were a very large number of properties
but here there is only seven.
However I guess what I'm really complaining about is how hard it is to
read the for loop. We have to study the macros, keep track six different
arguments per property and review the complex logic of the for loop
(which for example handles inverted u8's that don't actually exist).
To be clear, it's not that loops aren't useful for reducing boilerplate
code. They can be. However trying to handle booleans and integers in the
*same* loop ends up needlessly hard to read.
Also, I think that if/when you adopt microamps/microvolts then the
hard-to-read problem will get even worse unless you get loops to do only
one thing!
Daniel.
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
next prev parent reply other threads:[~2022-06-07 10:42 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-31 11:18 [RESEND 00/14] Add Mediatek MT6370 PMIC support ChiaEn Wu
2022-05-31 11:18 ` [RESEND 01/14] dt-bindings: usb: Add Mediatek MT6370 TCPC binding ChiaEn Wu
2022-06-01 7:36 ` Krzysztof Kozlowski
2022-05-31 11:18 ` [RESEND 02/14] dt-bindings: power: supply: Add Mediatek MT6370 Charger binding ChiaEn Wu
2022-06-01 7:36 ` Krzysztof Kozlowski
2022-05-31 11:18 ` [RESEND 03/14] dt-bindings: leds: mt6370: Add Mediatek mt6370 indicator ChiaEn Wu
2022-05-31 22:46 ` Rob Herring
2022-06-01 7:36 ` Krzysztof Kozlowski
2022-05-31 11:18 ` [RESEND 04/14] dt-bindings: leds: Add Mediatek MT6370 flashlight binding ChiaEn Wu
2022-05-31 22:46 ` Rob Herring
2022-06-01 7:36 ` Krzysztof Kozlowski
2022-05-31 11:18 ` [RESEND 05/14] dt-bindings: backlight: Add Mediatek MT6370 backlight binding ChiaEn Wu
2022-06-01 7:37 ` Krzysztof Kozlowski
2022-05-31 11:18 ` [RESEND 06/14] dt-bindings: mfd: Add Mediatek MT6370 binding ChiaEn Wu
2022-05-31 22:46 ` Rob Herring
2022-05-31 11:18 ` [RESEND 07/14] mfd: mt6370: Add Mediatek MT6370 support ChiaEn Wu
2022-05-31 11:18 ` [RESEND 08/14] usb: typec: tcpci_mt6370: Add Mediatek MT6370 tcpci driver ChiaEn Wu
2022-05-31 11:18 ` [RESEND 09/14] regulator: mt6370: Add mt6370 DisplayBias and VibLDO support ChiaEn Wu
2022-05-31 11:18 ` [RESEND 10/14] iio: adc: mt6370: Add Mediatek MT6370 support ChiaEn Wu
2022-05-31 13:21 ` Jonathan Cameron
2022-06-02 18:22 ` ChiaEn Wu
2022-06-03 17:19 ` Jonathan Cameron
2022-05-31 11:18 ` [RESEND 11/14] power: supply: mt6370: Add Mediatek MT6370 charger driver ChiaEn Wu
2022-05-31 11:18 ` [RESEND 12/14] leds: mt6370: Add Mediatek MT6370 Indicator support ChiaEn Wu
2022-06-06 14:28 ` kernel test robot
2022-05-31 11:18 ` [RESEND 13/14] leds: flashlight: mt6370: Add Mediatek MT6370 flashlight support ChiaEn Wu
2022-06-02 10:05 ` kernel test robot
2022-05-31 11:19 ` [RESEND 14/14] video: backlight: mt6370: Add Mediatek MT6370 support ChiaEn Wu
2022-06-01 9:46 ` Daniel Thompson
2022-06-02 19:14 ` ChiaEn Wu
2022-06-07 10:41 ` Daniel Thompson [this message]
2022-06-01 7:35 ` [RESEND 00/14] Add Mediatek MT6370 PMIC support Krzysztof Kozlowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220607104136.cfnpwo6ajqiuafbf@maple.lan \
--to=daniel.thompson@linaro.org \
--cc=alice_chen@richtek.com \
--cc=broonie@kernel.org \
--cc=chiaen_wu@richtek.com \
--cc=chunfeng.yun@mediatek.com \
--cc=cy_huang@richtek.com \
--cc=deller@gmx.de \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=jic23@kernel.org \
--cc=jingoohan1@gmail.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=lars@metafoo.de \
--cc=lee.jones@linaro.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=matthias.bgg@gmail.com \
--cc=pavel@ucw.cz \
--cc=peterwu.pub@gmail.com \
--cc=robh+dt@kernel.org \
--cc=sre@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).