From patchwork Mon Nov 26 13:04:46 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Takashi Iwai X-Patchwork-Id: 1802201 Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 5105B3FC23 for ; Mon, 26 Nov 2012 13:04:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753018Ab2KZNEt (ORCPT ); Mon, 26 Nov 2012 08:04:49 -0500 Received: from cantor2.suse.de ([195.135.220.15]:43123 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752962Ab2KZNEs (ORCPT ); Mon, 26 Nov 2012 08:04:48 -0500 Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id EBD03A4508; Mon, 26 Nov 2012 14:04:46 +0100 (CET) Date: Mon, 26 Nov 2012 14:04:46 +0100 Message-ID: From: Takashi Iwai To: Clemens Ladisch Cc: Jonathan Nieder , Steffen =?UTF-8?B?TcO8bGxlcg==?= , alsa-devel@alsa-project.org, Olivier MATZ , linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, Oliver Neukum , stable@vger.kernel.org, David Banks , Ralf Lang Subject: Re: [alsa-devel] [PATCH] usb: add USB_QUIRK_RESET_RESUME for M-Audio 49 In-Reply-To: <50B36213.9090007@ladisch.de> References: <4FA2D481.4070304@droids-corp.org> <4FA2DB9D.1040303@droids-corp.org> <20120604110608.GG8248@droids-corp.org> <20120605232432.GE3619@burratino> <4FD06563.7050605@droids-corp.org> <20121125094110.GA21387@elie.Belkin> <50B2815E.2090105@droids-corp.org> <20121125212100.GE24024@elie.Belkin> <50B29537.7060007@ladisch.de> <50B36213.9090007@ladisch.de> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/24.2 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org At Mon, 26 Nov 2012 13:35:31 +0100, Clemens Ladisch wrote: > > Takashi Iwai wrote:> At Sun, 25 Nov 2012 23:01:27 +0100, > > Clemens Ladisch wrote: > >> > >> Jonathan Nieder wrote: > >>> Some USB MIDI keyboards fail to operate after a USB autosuspend. > >> > >> Make that *all* USB MIDI devices with input ports. > >> > >> This is not a bug in the device, but one of the many bugs introduced > >> with the autosuspend code in . > >> > >> That patch does not handle input at all, i.e., when the driver wants to > >> read from the device, it just doesn't take it out of suspend mode. > >> > >>> A workaround is to disable USB autosuspend for these devices by > >>> putting AUTOSUSPEND_USBID_BLACKLIST="0763:2027" (resp. 0763:019b) in > >>> /etc/laptop-mode/conf.d/usb-autosuspend.conf. In the spirit of commit > >>> 166cb70e97bd ("usb: add USB_QUIRK_RESET_RESUME for M-Audio 88es"), > >>> reset the device on resume so this workaround is not needed any more. > >> > >> It is not feasible to add the IDs of all USB MIDI devices. > >> > >> I'm working on a fix that adds proper power management for input ports, > >> but this requires the driver to be reorganized a little ... > > > > Doesn't a simple patch like below work? > > > +static int substream_open(struct snd_rawmidi_substream *substream, int open) > > { > > + if (open && umidi->opened++ == 0) { > > + err = usb_autopm_get_interface(umidi->iface); > > > > static int snd_usbmidi_input_open(struct snd_rawmidi_substream *substream) > > { > > + return substream_open(substream, 1); > > No, because the input URBs are submitted before the userspace device is > opened. (And usb_autopm_get_interface() cannot be called from the USB > probe callback.) Ah, right. What's the reason of submitting input urbs for the all time from the beginning? For loopback? If it has to be running, the easiest fix would be the patch like below. This will turn off the autopm essentially, but better than breakage. Takashi --- -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/sound/usb/midi.c b/sound/usb/midi.c index eeefbce..66acccb 100644 --- a/sound/usb/midi.c +++ b/sound/usb/midi.c @@ -175,6 +175,7 @@ struct snd_usb_midi_in_endpoint { u8 seen_f5; u8 error_resubmit; int current_port; + bool autopm_reference; }; static void snd_usbmidi_do_output(struct snd_usb_midi_out_endpoint* ep); @@ -2065,6 +2066,8 @@ void snd_usbmidi_input_stop(struct list_head* p) if (ep->in) for (j = 0; j < INPUT_URBS; ++j) usb_kill_urb(ep->in->urbs[j]); + if (ep->autopm_reference) + usb_autopm_put_interface(umidi->iface); } } @@ -2074,6 +2077,8 @@ static void snd_usbmidi_input_start_ep(struct snd_usb_midi_in_endpoint* ep) if (!ep) return; + ep->autopm_reference = + usb_autopm_get_interface(ep->umidi->iface) >= 0; for (i = 0; i < INPUT_URBS; ++i) { struct urb* urb = ep->urbs[i]; urb->dev = ep->umidi->dev;