From: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
To: alsa-devel@lists.sourceforge.net
Cc: Bill Gatliff <bgat@billgatliff.com>, Nicolas Pitre <nico@cam.org>
Subject: [PATCH] AC97 bus interface for ad-hoc drivers
Date: Tue, 19 Jul 2005 13:20:24 +0100 [thread overview]
Message-ID: <1121775624.14604.14.camel@cearnarfon> (raw)
[-- Attachment #1: Type: text/plain, Size: 446 bytes --]
This patch adds support for ad-hoc AC97 device drivers (e.g WM97xx and
UCB touchscreen drivers) and was originally posted to the list by
Nicolas Pitre as an RFC.
Changes from RFC version :-
o Now matches codec name within codec group.
o Added ac97_dev_release() to stop kernel complaining about no release
method for device.
Liam
Signed-off-by: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
Signed-off-by: Nicolas Pitre <nico@cam.org>
[-- Attachment #2: ac97-bus.diff --]
[-- Type: text/x-patch, Size: 4501 bytes --]
diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h
--- a/include/sound/ac97_codec.h
+++ b/include/sound/ac97_codec.h
@@ -26,6 +26,7 @@
*/
#include <linux/bitops.h>
+#include <linux/device.h>
#include "pcm.h"
#include "control.h"
#include "info.h"
@@ -520,6 +521,7 @@ struct _snd_ac97 {
/* jack-sharing info */
unsigned char indep_surround;
unsigned char channel_mode;
+ struct device dev;
};
/* conditions */
@@ -599,4 +601,8 @@ struct ac97_enum {
unsigned short mask;
const char **texts;
};
+
+/* ad hoc AC97 device driver access */
+extern struct bus_type ac97_bus_type;
+
#endif /* __SOUND_AC97_CODEC_H */
diff --git a/sound/pci/ac97/Makefile b/sound/pci/ac97/Makefile
--- a/sound/pci/ac97/Makefile
+++ b/sound/pci/ac97/Makefile
@@ -12,7 +12,7 @@ endif
snd-ak4531-codec-objs := ak4531_codec.o
# Toplevel Module Dependency
-obj-$(CONFIG_SND_AC97_CODEC) += snd-ac97-codec.o
+obj-$(CONFIG_SND_AC97_CODEC) += snd-ac97-codec.o ac97_bus.o
obj-$(CONFIG_SND_ENS1370) += snd-ak4531-codec.o
obj-m := $(sort $(obj-m))
diff --git a/sound/pci/ac97/ac97_bus.c b/sound/pci/ac97/ac97_bus.c
new file mode 100644
--- /dev/null
+++ b/sound/pci/ac97/ac97_bus.c
@@ -0,0 +1,83 @@
+/*
+ * 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>
+
+#include <sound/driver.h>
+#include <sound/core.h>
+#include <sound/ac97_codec.h>
+
+/*
+ * Codec families have names seperated by commas, so we search for an
+ * individual codec name within the family string.
+ */
+static int ac97_bus_match(struct device *dev, struct device_driver *drv)
+{
+ return (strstr(dev->bus_id, drv->name) != NULL);
+}
+
+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, SUSPEND_DISABLE);
+ if (ret == 0)
+ ret = dev->driver->suspend(dev, state, SUSPEND_SAVE_STATE);
+ if (ret == 0)
+ ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN);
+ }
+ return ret;
+}
+
+static int ac97_bus_resume(struct device *dev)
+{
+ int ret = 0;
+
+ if (dev->driver && dev->driver->resume) {
+ ret = dev->driver->resume(dev, RESUME_POWER_ON);
+ if (ret == 0)
+ ret = dev->driver->resume(dev, RESUME_RESTORE_STATE);
+ if (ret == 0)
+ ret = dev->driver->resume(dev, RESUME_ENABLE);
+ }
+ 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/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
--- a/sound/pci/ac97/ac97_codec.c
+++ b/sound/pci/ac97/ac97_codec.c
@@ -992,6 +992,8 @@ static int snd_ac97_free(ac97_t *ac97)
{
if (ac97) {
snd_ac97_proc_done(ac97);
+ if (ac97->dev.bus)
+ device_unregister(&ac97->dev);
if (ac97->bus) {
ac97->bus->codec[ac97->num] = NULL;
if (ac97->bus->shared_type) {
@@ -1007,6 +1009,11 @@ static int snd_ac97_free(ac97_t *ac97)
return 0;
}
+/* Stops no dev release warning */
+static void ac97_dev_release(struct device * dev)
+{
+}
+
static int snd_ac97_dev_free(snd_device_t *device)
{
ac97_t *ac97 = device->device_data;
@@ -2117,6 +2124,14 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97
snd_ac97_free(ac97);
return err;
}
+
+ ac97->dev.bus = &ac97_bus_type;
+ ac97->dev.parent = ac97->bus->card->dev;
+ ac97->dev.platform_data = ac97;
+ ac97->dev.release = ac97_dev_release;
+ strncpy(ac97->dev.bus_id, snd_ac97_get_short_name(ac97), BUS_ID_SIZE);
+ if ((err = device_register(&ac97->dev)) < 0)
+ return err;
*rac97 = ac97;
if (bus->shared_type) {
next reply other threads:[~2005-07-19 12:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-19 12:20 Liam Girdwood [this message]
2005-07-27 11:10 ` [PATCH] AC97 bus interface for ad-hoc drivers Takashi Iwai
2005-07-27 13:05 ` Nicolas Pitre
2005-07-27 13:18 ` Takashi Iwai
2005-07-27 13:43 ` Liam Girdwood
2005-07-28 20:26 ` Liam Girdwood
2005-07-29 10:45 ` Takashi Iwai
2005-07-29 11:20 ` Liam Girdwood
2005-07-29 11:27 ` Takashi Iwai
2005-07-29 12:51 ` Liam Girdwood
2005-07-29 15:19 ` Takashi Iwai
2005-07-31 14:26 ` Liam Girdwood
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=1121775624.14604.14.camel@cearnarfon \
--to=liam.girdwood@wolfsonmicro.com \
--cc=alsa-devel@lists.sourceforge.net \
--cc=bgat@billgatliff.com \
--cc=nico@cam.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