On Sat, Oct 08, 2022 at 03:10:18PM +0300, Mikhail wrote:
> I'm troubleshooting battery status for my Lenovo IdeaPad 3 14ITL05, on
> latest -current it shows that battery is absent and AC not connected:
> 
> Battery state: absent, 0% remaining, unknown life estimate
> AC adapter state: not connected
> Performance adjustment mode: manual (2900 MHz)

Thinking about this a little bit more, I thought that we can just check
if EC_ID from ECDT is actually present, and if it's not - fail the
attach.

With the patch I see two ECs in my dmesg:

acpiec0 at acpi0
acpiec0: failed to find EC_ID
acpiec0: Failed to read resource settings
[...]
acpiec1 at acpi0

which is of course wrong.

But these things works:

 - apm status
 - capslock led
 - brightness keys

diff /usr/src
commit - 924a158ae16809f41bf3f03c54fb2a8cdfa1d6e8
path + /usr/src
blob - 5ef24d5179de52d5321e578b3b73dd9524e7c1de
file + sys/dev/acpi/acpiec.c
--- sys/dev/acpi/acpiec.c
+++ sys/dev/acpi/acpiec.c
@@ -429,6 +429,14 @@ acpiec_getcrs(struct acpiec_softc *sc, struct acpi_att
 
        /* Check if this is ECDT initialization */
        if (ecdt) {
+               /* Get devnode from header */
+               sc->sc_devnode = aml_searchname(sc->sc_acpi->sc_root,
+                   ecdt->ec_id);
+               if (sc->sc_devnode == NULL) {
+                       printf("%s: failed to find EC_ID\n", DEVNAME(sc));
+                       return (1);
+               }
+
                /* Get GPE, Data and Control segments */
                sc->sc_gpe = ecdt->gpe_bit;
 
@@ -444,10 +452,6 @@ acpiec_getcrs(struct acpiec_softc *sc, struct acpi_att
                        sc->sc_data_bt = sc->sc_acpi->sc_memt;
                sc->sc_ec_data = ecdt->ec_data.address;
 
-               /* Get devnode from header */
-               sc->sc_devnode = aml_searchname(sc->sc_acpi->sc_root,
-                   ecdt->ec_id);
-
                goto ecdtdone;
        }
 

Reply via email to