Re: [PATCH] ucb1400_ts depends SND_AC97_BUS

From: Randy Dunlap
Date: Thu Sep 04 2008 - 22:58:26 EST


On Sun, 10 Dec 2006 22:55:25 -0500 (EST) Nicolas Pitre wrote:

> On Sat, 9 Dec 2006, Randy Dunlap wrote:
>
> > On Sat, 09 Dec 2006 22:17:55 -0500 (EST) Nicolas Pitre wrote:
> >
> > > Please consider what SND_CONFIG_AC97_BUS corresponds to. It is
> > > sound/pci/ac97/ac97_bus.c and if you look into this file you'll see that
> > > it is perfectly buildable even if sound is entirely configured out, just
> > > like some lib code would be.
> >
> > OK. Should it (CONFIG_SND_AC97_BUS -> sound/pci/ac97/ac97_bus.c)
> > be buildable when sound is disabled?
>
> Yes.
>
> > If so, where should it be moved to (since afaik, make won't even
> > descend into sound/ if SOUND=n; I don't see that changing
> > any time soon).
>
> What about this patch?

Can we get this patch or some patch into the input tree for linux-next?

Currently ucb1400_core using ac97_bus_type is the #1 build failure in linux-next.
In 50 randconfigs today, this was the failure in 20 builds.


> ----- >8
> Subject: break config ordering/dependency between UCB1400 touchscreen driver and sound subsystem
>
> Commit 2d4ba4a3b9aef95d328d74a17ae84f8d658059e2 introduced a dependency
> that was never meant to exist when the ac97_bus.c module was created.
> Move ac97_bus.c up the directory hierarchy to make sure it is built when
> selected even if sound is configured out so things work as originally
> expected.
>
> Signed-off-by: Nicolas Pitre <nico@xxxxxxx>
>
> ---
>
> diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
> index 3d5f196..6b46c9b 100644
> --- a/drivers/input/touchscreen/Kconfig
> +++ b/drivers/input/touchscreen/Kconfig
> @@ -146,7 +146,7 @@ config TOUCHSCREEN_TOUCHWIN
>
> config TOUCHSCREEN_UCB1400
> tristate "Philips UCB1400 touchscreen"
> - depends on SND_AC97_BUS
> + select AC97_BUS
> help
> This enables support for the Philips UCB1400 touchscreen interface.
> The UCB1400 is an AC97 audio codec. The touchscreen interface
> diff --git a/sound/Kconfig b/sound/Kconfig
> index 95949b6..9d77300 100644
> --- a/sound/Kconfig
> +++ b/sound/Kconfig
> @@ -93,4 +93,12 @@ endmenu
>
> endif
>
> +config AC97_BUS
> + tristate
> + help
> + This is used to avoid config and link hard dependencies between the
> + sound subsystem and other function drivers completely unrelated to
> + sound although they're sharing the AC97 bus. Concerned drivers
> + should "select" this.
> +
> endmenu
> diff --git a/sound/Makefile b/sound/Makefile
> index 5f6bef5..9aee54c 100644
> --- a/sound/Makefile
> +++ b/sound/Makefile
> @@ -8,6 +8,9 @@ obj-$(CONFIG_DMASOUND) += oss/
> obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/
> obj-$(CONFIG_SND_AOA) += aoa/
>
> +# This one must be compilable even if sound is configured out
> +obj-$(CONFIG_AC97_BUS) += ac97_bus.o
> +
> ifeq ($(CONFIG_SND),y)
> obj-y += last.o
> endif
> diff --git a/sound/ac97_bus.c b/sound/ac97_bus.c
> new file mode 100644
> index 0000000..66de2c2
> --- /dev/null
> +++ b/sound/ac97_bus.c
> @@ -0,0 +1,72 @@
> +/*
> + * Linux driver model AC97 bus interface
> + *
> + * Author: Nicolas Pitre
> + * Created: Jan 14, 2005
> + * Copyright: (C) MontaVista Software Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/device.h>
> +#include <linux/string.h>
> +
> +/*
> + * Let drivers decide whether they want to support given codec from their
> + * probe method. Drivers have direct access to the struct snd_ac97 structure and may
> + * decide based on the id field amongst other things.
> + */
> +static int ac97_bus_match(struct device *dev, struct device_driver *drv)
> +{
> + return 1;
> +}
> +
> +static int ac97_bus_suspend(struct device *dev, pm_message_t state)
> +{
> + int ret = 0;
> +
> + if (dev->driver && dev->driver->suspend)
> + ret = dev->driver->suspend(dev, state);
> +
> + return ret;
> +}
> +
> +static int ac97_bus_resume(struct device *dev)
> +{
> + int ret = 0;
> +
> + if (dev->driver && dev->driver->resume)
> + ret = dev->driver->resume(dev);
> +
> + return ret;
> +}
> +
> +struct bus_type ac97_bus_type = {
> + .name = "ac97",
> + .match = ac97_bus_match,
> + .suspend = ac97_bus_suspend,
> + .resume = ac97_bus_resume,
> +};
> +
> +static int __init ac97_bus_init(void)
> +{
> + return bus_register(&ac97_bus_type);
> +}
> +
> +subsys_initcall(ac97_bus_init);
> +
> +static void __exit ac97_bus_exit(void)
> +{
> + bus_unregister(&ac97_bus_type);
> +}
> +
> +module_exit(ac97_bus_exit);
> +
> +EXPORT_SYMBOL(ac97_bus_type);
> +
> +MODULE_LICENSE("GPL");
> diff --git a/sound/drivers/Kconfig b/sound/drivers/Kconfig
> index 7971285..40ebd2f 100644
> --- a/sound/drivers/Kconfig
> +++ b/sound/drivers/Kconfig
> @@ -26,11 +26,7 @@ config SND_VX_LIB
> config SND_AC97_CODEC
> tristate
> select SND_PCM
> - select SND_AC97_BUS
> -
> -config SND_AC97_BUS
> - tristate
> -
> + select AC97_BUS
>
> config SND_DUMMY
> tristate "Dummy (/dev/null) soundcard"
> diff --git a/sound/pci/ac97/Makefile b/sound/pci/ac97/Makefile
> index 77b3482..3c32221 100644
> --- a/sound/pci/ac97/Makefile
> +++ b/sound/pci/ac97/Makefile
> @@ -10,11 +10,9 @@ snd-ac97-codec-objs += ac97_proc.o
> endif
>
> snd-ak4531-codec-objs := ak4531_codec.o
> -snd-ac97-bus-objs := ac97_bus.o
>
> # Toplevel Module Dependency
> obj-$(CONFIG_SND_AC97_CODEC) += snd-ac97-codec.o
> obj-$(CONFIG_SND_ENS1370) += snd-ak4531-codec.o
> -obj-$(CONFIG_SND_AC97_BUS) += snd-ac97-bus.o
>
> obj-m := $(sort $(obj-m))
> diff --git a/sound/pci/ac97/ac97_bus.c b/sound/pci/ac97/ac97_bus.c
> deleted file mode 100644
> index 66de2c2..0000000
> --- a/sound/pci/ac97/ac97_bus.c
> +++ /dev/null
> @@ -1,72 +0,0 @@
> -/*
> - * Linux driver model AC97 bus interface
> - *
> - * Author: Nicolas Pitre
> - * Created: Jan 14, 2005
> - * Copyright: (C) MontaVista Software Inc.
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> - */
> -
> -#include <linux/module.h>
> -#include <linux/init.h>
> -#include <linux/device.h>
> -#include <linux/string.h>
> -
> -/*
> - * Let drivers decide whether they want to support given codec from their
> - * probe method. Drivers have direct access to the struct snd_ac97 structure and may
> - * decide based on the id field amongst other things.
> - */
> -static int ac97_bus_match(struct device *dev, struct device_driver *drv)
> -{
> - return 1;
> -}
> -
> -static int ac97_bus_suspend(struct device *dev, pm_message_t state)
> -{
> - int ret = 0;
> -
> - if (dev->driver && dev->driver->suspend)
> - ret = dev->driver->suspend(dev, state);
> -
> - return ret;
> -}
> -
> -static int ac97_bus_resume(struct device *dev)
> -{
> - int ret = 0;
> -
> - if (dev->driver && dev->driver->resume)
> - ret = dev->driver->resume(dev);
> -
> - return ret;
> -}
> -
> -struct bus_type ac97_bus_type = {
> - .name = "ac97",
> - .match = ac97_bus_match,
> - .suspend = ac97_bus_suspend,
> - .resume = ac97_bus_resume,
> -};
> -
> -static int __init ac97_bus_init(void)
> -{
> - return bus_register(&ac97_bus_type);
> -}
> -
> -subsys_initcall(ac97_bus_init);
> -
> -static void __exit ac97_bus_exit(void)
> -{
> - bus_unregister(&ac97_bus_type);
> -}
> -
> -module_exit(ac97_bus_exit);
> -
> -EXPORT_SYMBOL(ac97_bus_type);
> -
> -MODULE_LICENSE("GPL");
> -


---
~Randy
Linux Plumbers Conference, 17-19 September 2008, Portland, Oregon USA
http://linuxplumbersconf.org/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/