Hi, On Sun, Feb 05, 2023 at 05:28:08PM +0200, Dmitry Baryshkov wrote: > From: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > > The Qualcomm Snapdragon-based Lenovo Yoga C630 has some sort of EC > providing AC-adapter and battery status, as well as USB Type-C altmode > notifications for Displayport operation. > > The Yoga C630 ships with Windows, where these operations primarily are > implemented in ACPI, but due to various issues with the hardware > representation therein it's not possible to run Linux on this > information. As such this is a best-effort re-implementation of these > operations, based on the register map expressed in ACPI and a fair > amount of trial and error. > > Tested-by: Steev Klimaszewski <steev@xxxxxxxx> > Signed-off-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> > --- [...] > +static bool yoga_c630_ec_is_charged(struct yoga_c630_ec *ec) > +{ > + if (ec->bat_status != 0) > + return false; > + > + if (ec->full_charge_capacity == ec->capacity_now) > + return true; > + > + if (ec->design_capacity == ec->capacity_now) > + return true; For other platforms I've seen the current capacity sometimes reaching higher values than the full charge capacity, so it's better to use <= here. > + return false; > +} [...] > +static int yoga_c630_ec_query_usb_event(struct yoga_c630_ec *ec) > +{ > + struct device *dev = &ec->client->dev; > + int event; > + > + mutex_lock(&ec->lock); > + event = yoga_c630_ec_read8(ec, LENOVO_EC_QUERY_USB_EVENT); > + mutex_unlock(&ec->lock); > + if (event < 0) { > + dev_err(dev, "unable to query USB event\n"); > + return event; > + } > + > + /* FIXME: handle the returned event to set the Type-C properties */ I guess this is more of a TODO than a FIXME? :) > + > + return 0; > +} -- Sebastian
Attachment:
signature.asc
Description: PGP signature