On Tue, May 23, 2017 at 07:51:14AM +0200, Cesare Gargano wrote:
> Hi,
> I made E200HA keyboard and touchpad work configuring node->parent deps.
> As Mark says, it's a order problem, we should attach all deps drivers before
> attaching the device driver itself.
> 
> Attached diff and a (old) dmesg.
> 
> -
> C.

This diff has not caused a problem on any of my machines, and I still
have it in my build tree.

What happened to it?

> diff --git a/.gitignore b/.gitignore
> new file mode 100644
> index 00000000000..dbd7620a943
> --- /dev/null
> +++ b/.gitignore
> @@ -0,0 +1,4 @@
> +obj/
> +~*
> +*.o
> +*.d
> diff --git a/sys/dev/acpi/acpi.c b/sys/dev/acpi/acpi.c
> index 09495657aad..092693e192c 100644
> --- a/sys/dev/acpi/acpi.c
> +++ b/sys/dev/acpi/acpi.c
> @@ -2819,7 +2819,7 @@ acpi_attach_deps(struct acpi_softc *sc, struct aml_node 
> *node)
>               if (dep == NULL || dep->attached)
>                       continue;
>               dep = aml_searchname(dep, "_HID");
> -             if (dep)
> +             if (dep && dep->parent->attached != 2)
>                       acpi_foundhid(dep, sc);
>       }
>  
> diff --git a/sys/dev/acpi/dwiic.c b/sys/dev/acpi/dwiic.c
> index 60bf8d17a22..302b0051229 100644
> --- a/sys/dev/acpi/dwiic.c
> +++ b/sys/dev/acpi/dwiic.c
> @@ -196,6 +196,8 @@ int               dwiic_i2c_exec(void *, i2c_op_t, 
> i2c_addr_t, const void *,
>                   size_t, void *, size_t, int);
>  void         dwiic_xfer_msg(struct dwiic_softc *);
>  
> +extern void  acpi_attach_deps(struct acpi_softc *, struct aml_node *);
> +
>  struct cfattach dwiic_ca = {
>       sizeof(struct dwiic_softc),
>       dwiic_match,
> @@ -567,11 +569,15 @@ dwiic_acpi_found_hid(struct aml_node *node, void *arg)
>               aml_freevalue(&res);
>               return (0);
>       }
> +
>       memset(&crs, 0, sizeof(crs));
>       crs.devnode = sc->sc_devnode;
>       aml_parse_resource(&res, dwiic_acpi_parse_crs, &crs);
>       aml_freevalue(&res);
>  
> +     node->parent->attached = 2;
> +     acpi_attach_deps(acpi_softc, node->parent);
> +
>       if (dwiic_matchhids(cdev, ihidev_hids))
>               return dwiic_acpi_found_ihidev(sc, node, dev, crs);
>       else if (dwiic_matchhids(dev, iatp_hids))


Reply via email to