From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Pengyu Luo <mitltlatltl@gmail.com>
Cc: andersson@kernel.org, bryan.odonoghue@linaro.org,
conor+dt@kernel.org, devicetree@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Hans de Goede <hdegoede@redhat.com>,
heikki.krogerus@linux.intel.com, jdelvare@suse.com,
konradybcio@kernel.org, krzk+dt@kernel.org,
linux-arm-msm@vger.kernel.org, linux-hwmon@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
linux-pm@vger.kernel.org, linux-usb@vger.kernel.org,
linux@roeck-us.net, platform-driver-x86@vger.kernel.org,
robh@kernel.org, sre@kernel.org
Subject: Re: [PATCH v3 2/6] platform: arm64: add Huawei Matebook E Go EC driver
Date: Tue, 14 Jan 2025 17:40:51 +0200 (EET) [thread overview]
Message-ID: <d2a42fc7-37a9-3fcc-4c35-e542ddb112e8@linux.intel.com> (raw)
In-Reply-To: <20250114083133.607318-1-mitltlatltl@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5290 bytes --]
On Tue, 14 Jan 2025, Pengyu Luo wrote:
> On Tue, Jan 14, 2025 at 2:56 AM Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> wrote:
> > On Tue, 14 Jan 2025, Pengyu Luo wrote:
> >
> > > There are three variants of which Huawei released the first two
> > > simultaneously.
> > >
> > > Huawei Matebook E Go LTE(sc8180x), codename seems to be gaokun2.
> > > Huawei Matebook E Go(sc8280xp@3.0GHz), codename must be gaokun3. (see [1])
> > > Huawei Matebook E Go 2023(sc8280xp@2.69GHz), codename should be also gaokun3.
> > >
> > > Adding support for the latter two variants for now, this driver should
> > > also work for the sc8180x variant according to acpi table files, but I
> > > don't have the device to test yet.
> > >
> > > Different from other Qualcomm Snapdragon sc8280xp based machines, the
> > > Huawei Matebook E Go uses an embedded controller while others use
> > > a system called PMIC GLink. This embedded controller can be used to
> > > perform a set of various functions, including, but not limited to:
> > >
> > > - Battery and charger monitoring;
> > > - Charge control and smart charge;
> > > - Fn_lock settings;
> > > - Tablet lid status;
> > > - Temperature sensors;
> > > - USB Type-C notifications (ports orientation, DP alt mode HPD);
> > > - USB Type-C PD (according to observation, up to 48w).
> > >
> > > Add a driver for the EC which creates devices for UCSI and power supply
> > > devices.
> > >
> > > [1] https://bugzilla.kernel.org/show_bug.cgi?id=219645
> > >
> > > Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
> > > +/**
> > > + * gaokun_ec_psy_get_smart_charge_enable - check if smart charge is enabled
> > > + * @ec: The gaokun_ec
> > > + * @on: The state
> > > + *
> > > + * Return: 0 on success or negative error code.
> > > + */
> > > +int gaokun_ec_psy_get_smart_charge_enable(struct gaokun_ec *ec, bool *on)
> > > +{
> > > + /* GBAC */
> > > + *on = 0; /* clear other 3 Bytes */
> >
> > = false (as it's bool)
> >
> > What that comment means??? The type is bool so what "3 Bytes" ???
> >
>
> We will write to the lowest Byte, the higher 3 Bytes are dirty, so clear it.
Are you saying you assume bool is 4 bytes long? I'd be cautious on making
assumptions on sizeof(bool).
> We can also implememnt it like this
>
> int ret;
> u8 resp;
>
> ret = gaokun_ec_read_byte(.., &resp);
> if (ret)
> return ret;
>
> *on = !!resp;
Yes, I prefer explicit u8 -> bool conversion like this.
> > > +/* Fn lock */
> > > +static int gaokun_ec_get_fn_lock(struct gaokun_ec *ec, bool *on)
> > > +{
> > > + /* GFRS */
> > > + u8 req[] = MKREQ(0x02, 0x6B, 0);
> >
> > Does that random acronym map to one of the literal? In which case a define
> > would be more useful than a comment. (You seem to have a few similar
> > comments preceeding the req definitions)
> >
>
> They are ACPI method names/identifiers, it will be useful if someone want
> to locate ACPI's implementations.
Okay, I guess it's fine as is then.
> > > +static int gaokun_ec_get_temp(struct gaokun_ec *ec, u8 idx, int *temp)
> > > +{
> > > + /* GTMP */
> > > + u8 req[] = MKREQ(0x02, 0x61, 1, temp_reg[idx]);
> > > + u8 resp[] = MKRESP(sizeof(__le16));
> > > + __le16 tmp;
> > > + int ret;
> > > +
> > > + ret = gaokun_ec_read(ec, req, sizeof(resp), resp);
> > > + if (ret)
> > > + return ret;
> > > +
> > > + extr_resp((u8 *)&tmp, resp, sizeof(tmp));
> > > + *temp = le16_to_cpu(tmp) * 100; /* convert to HwMon's unit */
> >
> > extr_resp() does memcpy() but there should be no need to copy anything
> > here. You just want to have __le16 pointer of the response data data.
> >
>
> I think this would break abstraction, recently, these data are accessed by
> extr_resp() and refill_req() only.
If you want to keep doing it like that, not a big deal for me.
There are different ways to do the abstraction though, and not all require
memcpy() when changing a layer (e.g., a pointer advancing to the other
layer).
> > > +/* -------------------------------------------------------------------------- */
> > > +/* EC */
> > > +
> > > +static irqreturn_t gaokun_ec_irq_handler(int irq, void *data)
> > > +{
> > > + struct gaokun_ec *ec = data;
> > > + u8 req[] = MKREQ(EC_EVENT, EC_QUERY, 0);
> >
> > Great, here you have named them. Could you name all of the other literals
> > too, please.
>
> I mentioned this in previous version. Most of them are magic, it is hard to
> generalize them. We could name partial scmd according to specific functions
> (sysfs functions), their function names have implied registers' meaning, and
> these registers would be never reused in other functions.
Fair (I didn't read every comment made to the previous version).
> > > +/* -------------------------------------------------------------------------- */
> > > +/* API For UCSI */
> >
> > for
> >
>
> Agree
For me, you don't need to reply "Agree", "Ack" or something along those
lines if you're going to act on the feedback. Just make sure you don't
forget them :-). It'll save us both some time when we focus on points that
need further discussion.
--
i.
next prev parent reply other threads:[~2025-01-14 15:41 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-13 17:49 [PATCH v3 0/6] platform: arm64: Huawei Matebook E Go embedded controller Pengyu Luo
2025-01-13 17:50 ` [PATCH v3 2/6] platform: arm64: add Huawei Matebook E Go EC driver Pengyu Luo
2025-01-13 18:34 ` Guenter Roeck
2025-01-13 18:56 ` Ilpo Järvinen
2025-01-14 8:31 ` Pengyu Luo
2025-01-14 15:40 ` Ilpo Järvinen [this message]
2025-01-16 12:02 ` Heikki Krogerus
2025-01-13 17:51 ` [PATCH v3 3/6] usb: typec: ucsi: Add a macro definition for UCSI v1.0 Pengyu Luo
2025-01-13 17:51 ` [PATCH v3 4/6] usb: typec: ucsi: add Huawei Matebook E Go ucsi driver Pengyu Luo
2025-01-16 11:55 ` Heikki Krogerus
2025-01-16 18:26 ` Pengyu Luo
2025-01-13 17:51 ` [PATCH v3 5/6] power: supply: add Huawei Matebook E Go psy driver Pengyu Luo
2025-02-20 0:24 ` Sebastian Reichel
2025-02-20 6:43 ` Pengyu Luo
2025-02-21 1:33 ` Sebastian Reichel
2025-02-21 6:01 ` Pengyu Luo
2025-02-21 22:22 ` Sebastian Reichel
2025-02-22 11:27 ` Pengyu Luo
2025-01-13 17:51 ` [PATCH v3 6/6] arm64: dts: qcom: gaokun3: Add Embedded Controller node Pengyu Luo
2025-01-16 11:26 ` [PATCH v3 3/6] usb: typec: ucsi: Add a macro definition for UCSI v1.0 Heikki Krogerus
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=d2a42fc7-37a9-3fcc-4c35-e542ddb112e8@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=andersson@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=heikki.krogerus@linux.intel.com \
--cc=jdelvare@suse.com \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=mitltlatltl@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=robh@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