From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751519AbeEDJ1A (ORCPT ); Fri, 4 May 2018 05:27:00 -0400 Received: from mx2.suse.de ([195.135.220.15]:38797 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750733AbeEDJ07 (ORCPT ); Fri, 4 May 2018 05:26:59 -0400 Date: Fri, 04 May 2018 11:26:56 +0200 Message-ID: From: Takashi Iwai To: "Connor McAdams" Cc: , =?UTF-8?B?IkrDqXLDqW15IExlZmF1cmUi?= , "Jaroslav Kysela" , , Subject: Re: [PATCH 3/9] Add PCI region2 iomap for SBZ In-Reply-To: <1525383771-11105-3-git-send-email-conmanx360@gmail.com> References: <1525383771-11105-1-git-send-email-conmanx360@gmail.com> <1525383771-11105-3-git-send-email-conmanx360@gmail.com> 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/25.3 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 03 May 2018 23:42:44 +0200, Connor McAdams wrote: > > @@ -4691,8 +4699,17 @@ static void ca0132_free(struct hda_codec *codec) > > cancel_delayed_work_sync(&spec->unsol_hp_work); > snd_hda_power_up(codec); > - snd_hda_sequence_write(codec, spec->base_exit_verbs); > - ca0132_exit_chip(codec); > + switch (spec->quirk) { > + case QUIRK_SBZ: > + iounmap(spec->mem_base); > + snd_hda_sequence_write(codec, spec->base_exit_verbs); > + ca0132_exit_chip(codec); > + break; Do you need to unmap before the rest procedure? Usually the unmapping happens at the last, after all commands finished. > + default: > + snd_hda_sequence_write(codec, spec->base_exit_verbs); > + ca0132_exit_chip(codec); > + break; > + } > snd_hda_power_down(codec); > kfree(spec->spec_init_verbs); > kfree(codec->spec); So in this case, a cleaner way would be to add the conditional iounmap like: snd_hda_power_down(codec); if (spec->mem_base) iounmap(spec->mem_base); kfree(spec->spec_init_verbs); kfree(codec->spec); > @@ -4909,6 +4926,15 @@ static int patch_ca0132(struct hda_codec *codec) > else > spec->quirk = QUIRK_NONE; > > + /* Setup BAR Region 2 for Sound Blaster Z */ > + if (spec->quirk == QUIRK_SBZ) { > + spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); > + if (spec->mem_base == NULL) { > + codec_dbg(codec, "pci_iomap failed!"); > + codec_dbg(codec, "perhaps this is not an SBZ?"); This should be shown more explicitly, so better to be codec_warn() or codec_info(). thanks, Takashi From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH 3/9] Add PCI region2 iomap for SBZ Date: Fri, 04 May 2018 11:26:56 +0200 Message-ID: References: <1525383771-11105-1-git-send-email-conmanx360@gmail.com> <1525383771-11105-3-git-send-email-conmanx360@gmail.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 55B9D267235 for ; Fri, 4 May 2018 11:26:58 +0200 (CEST) In-Reply-To: <1525383771-11105-3-git-send-email-conmanx360@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Connor McAdams Cc: =?UTF-8?B?IkrDqXLDqW15IExlZmF1cmUi?= , alsa-devel@alsa-project.org, o-takashi@sakamocchi.jp, linux-kernel@vger.kernel.org List-Id: alsa-devel@alsa-project.org On Thu, 03 May 2018 23:42:44 +0200, Connor McAdams wrote: > > @@ -4691,8 +4699,17 @@ static void ca0132_free(struct hda_codec *codec) > > cancel_delayed_work_sync(&spec->unsol_hp_work); > snd_hda_power_up(codec); > - snd_hda_sequence_write(codec, spec->base_exit_verbs); > - ca0132_exit_chip(codec); > + switch (spec->quirk) { > + case QUIRK_SBZ: > + iounmap(spec->mem_base); > + snd_hda_sequence_write(codec, spec->base_exit_verbs); > + ca0132_exit_chip(codec); > + break; Do you need to unmap before the rest procedure? Usually the unmapping happens at the last, after all commands finished. > + default: > + snd_hda_sequence_write(codec, spec->base_exit_verbs); > + ca0132_exit_chip(codec); > + break; > + } > snd_hda_power_down(codec); > kfree(spec->spec_init_verbs); > kfree(codec->spec); So in this case, a cleaner way would be to add the conditional iounmap like: snd_hda_power_down(codec); if (spec->mem_base) iounmap(spec->mem_base); kfree(spec->spec_init_verbs); kfree(codec->spec); > @@ -4909,6 +4926,15 @@ static int patch_ca0132(struct hda_codec *codec) > else > spec->quirk = QUIRK_NONE; > > + /* Setup BAR Region 2 for Sound Blaster Z */ > + if (spec->quirk == QUIRK_SBZ) { > + spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20); > + if (spec->mem_base == NULL) { > + codec_dbg(codec, "pci_iomap failed!"); > + codec_dbg(codec, "perhaps this is not an SBZ?"); This should be shown more explicitly, so better to be codec_warn() or codec_info(). thanks, Takashi