From: Andrej Krutak <dev@andree.sk>
To: alsa-devel@alsa-project.org
Cc: Andrej Krutak <dev@andree.sk>
Subject: [PATCH 05/15] ALSA: line6: Use device_create_file instead of snd_card_add_dev_attr
Date: Thu, 11 Aug 2016 21:02:17 +0200 [thread overview]
Message-ID: <1470942147-19848-6-git-send-email-dev@andree.sk> (raw)
In-Reply-To: <1470942147-19848-1-git-send-email-dev@andree.sk>
The latter seems to create invalid configuration, the device pointer passed
to the attr callbacks is not correct afterwards (results into segfaults when
accessing the attributes).
Signed-off-by: Andrej Krutak <dev@andree.sk>
---
sound/usb/line6/podhd.c | 60 ++++++++++++++++++++++++++++++++++++-------------
1 file changed, 44 insertions(+), 16 deletions(-)
diff --git a/sound/usb/line6/podhd.c b/sound/usb/line6/podhd.c
index 42fa376..f72803a 100644
--- a/sound/usb/line6/podhd.c
+++ b/sound/usb/line6/podhd.c
@@ -57,6 +57,9 @@ struct usb_line6_podhd {
/* Firmware version */
int firmware_version;
+
+ /* Flag whether the sysfs files were created */
+ int devfiles_created;
};
static struct snd_ratden podhd_ratden = {
@@ -177,16 +180,37 @@ static ssize_t firmware_version_show(struct device *dev,
static DEVICE_ATTR_RO(firmware_version);
static DEVICE_ATTR_RO(serial_number);
-static struct attribute *podhd_dev_attrs[] = {
- &dev_attr_firmware_version.attr,
- &dev_attr_serial_number.attr,
- NULL
-};
+/*
+ * Create sysfs entries.
+ */
+static int podhd_create_attrs(struct device *dev)
+{
+ int err;
+ struct usb_interface *interface = to_usb_interface(dev);
+ struct usb_line6_podhd *pod = usb_get_intfdata(interface);
-static const struct attribute_group podhd_dev_attr_group = {
- .name = "podhd",
- .attrs = podhd_dev_attrs,
-};
+ err = device_create_file(dev, &dev_attr_firmware_version);
+ if (err < 0)
+ return err;
+ err = device_create_file(dev, &dev_attr_serial_number);
+ if (err < 0)
+ return err;
+
+ pod->devfiles_created = 1;
+ return 0;
+}
+
+static void podhd_remove_attrs(struct device *dev)
+{
+ struct usb_interface *interface = to_usb_interface(dev);
+ struct usb_line6_podhd *pod = usb_get_intfdata(interface);
+
+ if (pod->devfiles_created) {
+ device_remove_file(dev, &dev_attr_firmware_version);
+ device_remove_file(dev, &dev_attr_serial_number);
+ pod->devfiles_created = 0;
+ }
+}
/*
* POD X3 startup procedure.
@@ -281,6 +305,14 @@ static int podhd_startup_finalize(struct usb_line6_podhd *pod)
{
struct usb_line6 *line6 = &pod->line6;
+ if (pod->line6.properties->capabilities & LINE6_CAP_CONTROL) {
+ /* create sysfs entries: */
+ int err = podhd_create_attrs(line6->ifcdev);
+
+ if (err < 0)
+ return err;
+ }
+
/* ALSA audio interface: */
return snd_card_register(line6->card);
}
@@ -288,8 +320,11 @@ static int podhd_startup_finalize(struct usb_line6_podhd *pod)
static void podhd_disconnect(struct usb_line6 *line6)
{
struct usb_line6_podhd *pod = (struct usb_line6_podhd *)line6;
+ struct device *dev = line6->ifcdev;
if (pod->line6.properties->capabilities & LINE6_CAP_CONTROL) {
+ podhd_remove_attrs(dev);
+
del_timer_sync(&pod->startup_timer);
cancel_work_sync(&pod->startup_work);
}
@@ -306,13 +341,6 @@ static int podhd_init(struct usb_line6 *line6,
line6->disconnect = podhd_disconnect;
- if (pod->line6.properties->capabilities & LINE6_CAP_CONTROL) {
- /* create sysfs entries: */
- err = snd_card_add_dev_attr(line6->card, &podhd_dev_attr_group);
- if (err < 0)
- return err;
- }
-
/* initialize MIDI subsystem: */
err = line6_init_midi(line6);
if (err < 0)
--
1.9.1
next prev parent reply other threads:[~2016-08-11 19:03 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-11 19:02 [PATCH 00/15] Line6 POD X3/X3Live suport Andrej Krutak
2016-08-11 19:02 ` [PATCH 01/15] ALSA: line6: Make driver configuration more generic Andrej Krutak
2016-08-12 8:24 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 02/15] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-08-11 19:02 ` [PATCH 03/15] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-08-11 19:02 ` [PATCH 04/15] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-08-11 19:02 ` Andrej Krutak [this message]
2016-08-12 8:26 ` [PATCH 05/15] ALSA: line6: Use device_create_file instead of snd_card_add_dev_attr Takashi Iwai
2016-08-11 19:02 ` [PATCH 06/15] ALSA: line6: Allow bulk endpoints instead of interrupt endpoints Andrej Krutak
2016-08-11 19:02 ` [PATCH 07/15] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-08-11 19:02 ` [PATCH 08/15] ALSA: line6: Cleanup initialization Andrej Krutak
2016-08-11 19:02 ` [PATCH 09/15] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-08-12 8:44 ` Takashi Iwai
2016-08-12 11:10 ` Andrej Kruták
2016-08-12 12:03 ` Takashi Iwai
2016-08-12 12:15 ` Andrej Kruták
2016-08-12 12:30 ` Takashi Iwai
2016-08-12 16:43 ` Andrej Kruták
2016-08-12 20:01 ` Takashi Iwai
2016-08-14 7:59 ` Andrej Kruták
2016-08-11 19:02 ` [PATCH 10/15] ALSA: line6: Add proper locks for hwdep open/release/read Andrej Krutak
2016-08-12 8:44 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 11/15] ALSA: line6: Only free buffer if it is set Andrej Krutak
2016-08-12 8:45 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 12/15] ALSA: line6: Give up on the lock while URBs are released Andrej Krutak
2016-08-12 8:45 ` Takashi Iwai
2016-08-12 11:14 ` Andrej Kruták
2016-08-12 12:04 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 13/15] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-08-11 19:02 ` [PATCH 14/15] ALSA: line6: Give up hwdep spinlock temporarily during read operation Andrej Krutak
2016-08-12 8:46 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 15/15] ALSA: line6: Remove double line6_pcm_release() after failed acquire Andrej Krutak
2016-08-12 8:46 ` Takashi Iwai
2016-08-12 8:14 ` [PATCH 00/15] Line6 POD X3/X3Live suport Takashi Iwai
2016-08-12 10:31 ` Andrej Kruták
2016-08-18 22:20 ` [PATCH v2 0/9] " Andrej Krutak
2016-08-18 22:20 ` [PATCH v2 1/9] ALSA: line6: Make driver configuration more generic Andrej Krutak
2016-08-24 14:50 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 2/9] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-08-24 14:53 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 3/9] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-08-24 14:56 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 4/9] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-08-18 22:20 ` [PATCH v2 5/9] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-08-18 22:20 ` [PATCH v2 6/9] ALSA: line6: Allow bulk endpoints instead of interrupt endpoints Andrej Krutak
2016-08-24 15:02 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 7/9] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-08-24 15:05 ` Takashi Iwai
2016-08-30 14:35 ` Andrej Kruták
2016-08-18 22:20 ` [PATCH v2 8/9] ALSA: line6: Cleanup initialization Andrej Krutak
2016-08-24 15:06 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 9/9] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 00/12] Line6 POD X3/X3Live suport Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 01/12] ALSA: line6: Enable different number of URBs for frame transfers Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 02/12] ALSA: line6: Add high-speed USB support Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 03/12] ALSA: line6: Support assymetrical in/out configurations Andrej Krutak
2016-09-16 18:34 ` kbuild test robot
2016-09-16 9:12 ` [PATCH v3 04/12] ALSA: line6: Allow different channel numbers for in/out Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 05/12] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 06/12] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 07/12] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 08/12] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 09/12] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 10/12] ALSA: line6: Only determine control port properties if needed Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 11/12] ALSA: line6: Cleanup podhd initialization Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 12/12] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 00/12] Line6 POD X3/X3Live suport Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 01/12] ALSA: line6: Enable different number of URBs for frame transfers Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 02/12] ALSA: line6: Add high-speed USB support Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 03/12] ALSA: line6: Support assymetrical in/out configurations Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 04/12] ALSA: line6: Allow different channel numbers for in/out Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 05/12] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 06/12] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 07/12] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 08/12] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 09/12] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 10/12] ALSA: line6: Only determine control port properties if needed Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 11/12] ALSA: line6: Cleanup podhd initialization Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 12/12] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-09-19 21:06 ` Takashi Iwai
2016-09-19 21:07 ` [PATCH v4 00/12] Line6 POD X3/X3Live suport Takashi Iwai
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=1470942147-19848-6-git-send-email-dev@andree.sk \
--to=dev@andree.sk \
--cc=alsa-devel@alsa-project.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;
as well as URLs for NNTP newsgroup(s).