From patchwork Mon Jan 29 04:39:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10189221 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B3F2060388 for ; Mon, 29 Jan 2018 05:03:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A2B07286AB for ; Mon, 29 Jan 2018 05:03:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 97112286AD; Mon, 29 Jan 2018 05:03:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, T_DKIM_INVALID autolearn=no version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A381B2621D for ; Mon, 29 Jan 2018 05:03:05 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id A86B326835A; Mon, 29 Jan 2018 05:58:23 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 15488268358; Mon, 29 Jan 2018 05:58:23 +0100 (CET) Received: from relmlie1.idc.renesas.com (relmlor2.renesas.com [210.160.252.172]) by alsa0.perex.cz (Postfix) with ESMTP id 116B9267BFC for ; Mon, 29 Jan 2018 05:39:59 +0100 (CET) Received: from unknown (HELO relmlir3.idc.renesas.com) ([10.200.68.153]) by relmlie1.idc.renesas.com with ESMTP; 29 Jan 2018 13:39:58 +0900 Received: from relmlii1.idc.renesas.com (relmlii1.idc.renesas.com [10.200.68.65]) by relmlir3.idc.renesas.com (Postfix) with ESMTP id 6532B5D5F5; Mon, 29 Jan 2018 13:39:58 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.46,429,1511794800"; d="scan'208";a="269597640" Received: from mail-sg2apc01lp0245.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.245]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 29 Jan 2018 13:39:57 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=9UFt+lDbdjavUVAilwPDsx4NXZwE7m3H4orwv2Uz/pk=; b=Nk6zkLRY8i1HZrloEwkIJ18I1Ya7/lJqPwPSgsJP+Wozc5nvJSUzlmWAWshwGK657okeWZKDlZAsaZtdTDvVvw6QrRfzDnIY9H7Z4ry5TELznAfYrSvTeoKv7ZBd7ISdeZzEeOVnhd0y4Pi7tk7vfdENZUdlCiALtxTu7k83nGA= Received: from morimoto-PC.renesas.com (211.11.155.138) by PS1PR0601MB1881.apcprd06.prod.outlook.com (2603:1096:803:8::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Mon, 29 Jan 2018 04:39:54 +0000 Message-ID: <87po5tuvnf.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 To: Mark Brown In-Reply-To: <87inbl5q6q.wl%kuninori.morimoto.gx@renesas.com> References: <87607l8k9i.wl%kuninori.morimoto.gx@renesas.com> <87inbl5q6q.wl%kuninori.morimoto.gx@renesas.com> MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Mon, 29 Jan 2018 04:39:54 +0000 X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: TY1PR06CA0036.apcprd06.prod.outlook.com (2a01:111:e400:5972::46) To PS1PR0601MB1881.apcprd06.prod.outlook.com (2603:1096:803:8::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 6121c1ae-35ab-4940-f0ed-08d566d25811 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:PS1PR0601MB1881; X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1881; 3:1x6n9XXQz9gHGOTPEiOugfpLCR0Jc+G9NmSFBOQFFx+cMHV8fMbFappmqKCZcsbEK7GqP6mMTRCNfvqYPFh2k/bF7UdWL7FNJy6HnoZUwNYnfiMM454bWJkR3cWg7dol/oMp8Yxfzz3nIukQ1p8juILkqWNtINmqFnTCdnbmIs7hJUJJJGNWH8e1tzwXLkxeGFSB+iK2EH3rAE99Z24dZEZB7aOSPT6uCA9sWGJGTbvVBNJdS3ivqccne+gWdi1K; 25:484QUEJvFco3BESQWZGFlDP1Tj8JLNta/HqdnTBLZ+uGhM5zHP0HyYCo77x+7yjyd9Bbp/VKoTVSFk7ZwsClEWtafHOtoJCGhww6d7nRlJHY3TrywvtQs3ZbaUXqqzU32dbTZ12VkT7viHY2DVqnviBiQyWHo+2JBCGdZ5w1LouPwGfysGuqrLSBgIvIX+0ETFQ6Hnx0zqoiByXw0dVSaVRp6UN31WBql3q9ompUjnJzC2ufjA6j4lZA5AygP5fmy6qVHCKrFZzv7p9Fo1CXC2EqwtipXJnlgoKa5YYnZMeNYShRTXC6Yezkw9cwQ46TVSr1GEqtFVKugf1qfuylkg==; 31:NC/1ry9XkHRJSPUvs5YaNwS8shoS0I3GgUI6+QXC7V7Yzxo+mxQSfNzWddDAGyQM4Ze+BImIOTLr8UPzATgHrTSmicQKYFL3zvqQ/S2Z1TVNZSdXUbdPfhT0xiInLHBfCfUZhqsni8W8jWtwgzQ2mvbxZwDyKqxiwbEjlV+dsyDliFkjiTOyrGJ6qCbcJ0JDKlDajiTACx+90gtwTKO0EnD3Su90DiHc7Mzlex//h6I= X-MS-TrafficTypeDiagnostic: PS1PR0601MB1881: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1881; 20:FsSnY7VKRK+iVx29ttyCIDCIg2rmvT9bmif8rGFVEM9vXMvmcXrkYAuZmI0ALFDCv4Or6ejBO6P6koqACwVuYdvc4Q1UNwzV44vTxKuPPDupVOhvUxh2+YCSnjmnXiLjuUudQzW3mi1LquZ37ygQU5VK8Gu7OksljZpabbkwCAfutbv/uaWfGMSSSy2YW2hIHwhJucfNCIiRtfALYXvA3U8bUlZWPie7fOPfVEn7NJcGS0ldpdrSG1d9029JXXO4hrNDpCDZPEIkbFmoZrkbMg7XCkm8SxqSbmiJ2ZyaNR0dsOBwfCng2ziEGgq9Xh/StxtGCTG/qoG9hMGh43uzQYlhzQMJUntoXHc0wVHYhFb33klJzRiD2HHiJs1msjJVcrE6bSm4sQzXqFRHsPrFH571N+503IcAf77aX6krPxf5q+wot+oe2ANNqLdl9ua4GIbHbvQBAv903LDBnMvH9ulpsCiftb4V6H1JV3o8AdNm5hKh7dQhV/Dbrr+jLP6l; 4:P3myNg9Vny9l5FiJbgc64kxTCjITbW5h7w/l1/POHamHBkWna9applzp05HX2t1V8jaP6UUR6fSkC/oXYsmCm13ZaEcu6drGAEyT9zxuuLUaQSxK1Csk5egUhi3PjKM+1zBBcYhE4HALYUfMuQHKMLMTiv+8nVrkrPV5t4WBmxMHTwqH9JGfrTN2TQ5hNgi+szUfj8HoCX8LI+F6Hdnj2/Eekwj7sdux36oyet05eclP6i0cPjRYAVHFc15SrOsUPtcFnh/A6oOxH3/6Z1lpaWUtPM9z9yQThWMOsZ+tAChpWZGhsA+kHSwu870ZlxqP X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231101)(944501161)(10201501046)(3002001)(6055026)(6041288)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:PS1PR0601MB1881; BCL:0; PCL:0; RULEID:; SRVR:PS1PR0601MB1881; X-Forefront-PRVS: 0567A15835 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(346002)(366004)(396003)(39860400002)(376002)(39380400002)(189003)(199004)(6116002)(50466002)(6916009)(6486002)(53416004)(47776003)(25786009)(305945005)(2950100002)(7736002)(386003)(52116002)(2906002)(7696005)(59450400001)(86362001)(3846002)(16526019)(68736007)(4326008)(23726003)(186003)(26005)(83506002)(106356001)(8676002)(81166006)(81156014)(16586007)(8936002)(58126008)(105586002)(69596002)(66066001)(36756003)(53936002)(76176011)(316002)(478600001)(5660300001)(97736004)(21314002)(16060500001)(309714004); DIR:OUT; SFP:1102; SCL:1; SRVR:PS1PR0601MB1881; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; PS1PR0601MB1881; 23:MFFCFdYhcrusae3uY2hjfpChf3xkqVkKVBpMusb?= =?us-ascii?Q?gvm6FFF3Jj4+vxIzAIwk7uYjpVfeew2BZ0WfJkZzIPqCSejEw1Icj7hu+NOK?= =?us-ascii?Q?n4GFIbyx0SQVty3gi/7tqLiL1pHR0wn6oVDiT31k6cxg+xv4RJL7DEPF540F?= =?us-ascii?Q?BNN/NpH+ixfJJjFNkDiXvugPN2nYybQQjqPBbIQDx59lWvw4SpM7nre4/J3R?= =?us-ascii?Q?hIgyICbbk2pwylf70tpunnLiNHHggfcyDo7KCo79iSRu8BexVY6w8mc7j6V5?= =?us-ascii?Q?4+SapGmQynPVDH3UQEodYFV+AZeUooav+rNbvj7IWnJIvhpKlayyGe+NLq7J?= =?us-ascii?Q?NHA1ONr0F3h055vFpgG7+sa9RDL2UzBS0qJCeYCC7sV8abAkolOYl4rmAVue?= =?us-ascii?Q?jBAdC/UPJ+KWwvjyOg9kidESf/Vh9FHx1gitiPMdF0GykfjdGLz3Jj+8v0o4?= =?us-ascii?Q?xXXRQ5oEO8fRMZXkaGRq+Ol3SkkHwkgSswPDXqJo/2+Qbc8af4Wv/L1SczOm?= =?us-ascii?Q?J7qcuF3cc50Zaduml+a81YGyv9G0zt+NC2R6+0jyaVHyFqQ8jcl6MmzqdPEa?= =?us-ascii?Q?RWFSyNLap9F3oNm1h5BkCCKFE0It0Uuk5VxF+5fP8hMjGg4RD3+G0Z3YsPuI?= =?us-ascii?Q?YJLf7AlwKxXWlbh6DczmsaYEKCe9I31D7n5gRCgzR0IwPNZEtToEitkHun68?= =?us-ascii?Q?JSbaem3yhOpaOxUp1DBGLUHl++jDMxbnT8FCIJ/GVAeCnHiHBzomI6+kdWET?= =?us-ascii?Q?JHZK4apr31+v90CWxS6lQPfre2P/xreA8CAOW4kMurRgl3DfnFy98DRnaP4L?= =?us-ascii?Q?xIP2e5ecw1bWAQKIykaoP8C9DU2fGymYcaydkUmR3KSaRHLBeirtth5yjES1?= =?us-ascii?Q?BAmUq8bHzdYbCudTWey0qlSgcsG1sqZv/svUJV/ZEkJcBsNXFflwVfZi3rAL?= =?us-ascii?Q?C8iiCn0hpQCqIqZluDMlw6S/VEKRVnxgksr8ssuG9hXpF5c/hHlJPng1V89e?= =?us-ascii?Q?DQzEOWGZLzjor/5biZRa1GgpRRD4249ScesztfRYORMg+sqoqucQ9dD+FMPR?= =?us-ascii?Q?NDZtft65C+/HlFT5Ou/tc81I5bNXs1+IQ6ABWBP4axwW0HqXiZn/7iz3Efms?= =?us-ascii?Q?EgqPRHfq8haO1R80pr4T5euh+wijVZI7RxmdNtbX/c15KC5zZj/gISqiYpac?= =?us-ascii?Q?w6md4H2hgLAVlHit2wc1K9f07kWfVYSFM7U/1?= X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1881; 6:IM+z7VJUJchYeR0mHXTOsKGNTQKweA25kTy00A801wckrEGqFWEsHWb6g21J1aU74GnUz+Z2DXmgVJHqVJOfp34DbWQS5JyylaxLF76NSJg+GkVI+Ghf389K8m3/RWeQJysUOzELkKk4stFc2qjsV3YDefbp0o+Yf8m0dxwVPzjJS+j9HctbgonhLixpGQpkVGk0rBuOuP/zESvBpPSHJ5XsKoFYCtlHOdyuKzb2oknLOk3VRdSivxrrXsKMRvbTVchfNOGI01AYPi//HZ3oFb+L/kz52Gs7L5q/vIvh90c1KIqANwgtshq4einpfrPYHlER4NG+XBG3Bzs0BEvBvoFheEvjPxErFBqtA+YRqDE=; 5:etAUj5rYkEqk8JH109NQXzw3QybsrjBK839YrmgSzDAWBEMrwOZOxW2nx8Fi7u8NW0/795UYtwgl+5TUrppI5VhNbqpspmHNlMFqg2/288eVibRzvU0ukcVY8pnY62DDDg1zaejbDQpXiYkM4dY4ylDQwj2wVc4RbArV5Y467+A=; 24:0xKm8SSmCNvImAlxSRtXYqqmjo9rtIpv9wcZawphzQXApNgHO7dFCpEjvbmbqbKF//a7bmwnaMAzH9uM8fGOtL2aLQneP0qRE0OpR+0dOtI=; 7:gKHhXRFMrhIA2kRHaoHLsmUk2XLxQ6TRo94GoGAc/fjW1UsQSIbM0vXR0IFRwjy362nC4E9f2XE9zzCz/QgI2kNMiMYvszC5HwDYHbyFfVXbCncXoOhmsxvk6pO3TfHaoXt/9GKnBl5i2y0OzdMmDROclbw1TtYhLinkr3La5wAQMY4Q625FBs8ljRVh5lp510xBCMN8LT4eInGWf3IYe3oYMBN89m0I/K9G4ai7XgePGEOMYZjIm6oTTEM9baQv SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1881; 20:oIp5OoNYwUf8L1bKQbA4yVifNZhHq/dRBfwCAhoPVOfTt80FsRvQb5G3D6sjiOHZTDK5qSBcdSRbRWYA0I+mejRrP4yEbtgVw2fONqCHk8uQ4+jC9aICe62hsGDSJzeIyF4HxpNkjFWPebbbueICjXsAox6ZOt2q4LdwXGrch/Y= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2018 04:39:54.7498 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6121c1ae-35ab-4940-f0ed-08d566d25811 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: PS1PR0601MB1881 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 169/186] ASoC: tfa9879: replace codec to component X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" 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 X-Virus-Scanned: ClamAV using ClamSMTP From: Kuninori Morimoto Now we can replace Codec to Component. Let's do it. Note: xxx_codec_xxx() -> xxx_component_xxx() .idle_bias_off = 0 -> .idle_bias_on = 1 .ignore_pmdown_time = 0 -> .use_pmdown_time = 1 - -> .endianness = 1 - -> .non_legacy_dai_naming = 1 Signed-off-by: Kuninori Morimoto --- sound/soc/codecs/tfa9879.c | 50 ++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/sound/soc/codecs/tfa9879.c b/sound/soc/codecs/tfa9879.c index e7ca764..6d213c6 100644 --- a/sound/soc/codecs/tfa9879.c +++ b/sound/soc/codecs/tfa9879.c @@ -30,8 +30,8 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { - struct snd_soc_codec *codec = dai->codec; - struct tfa9879_priv *tfa9879 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct tfa9879_priv *tfa9879 = snd_soc_component_get_drvdata(component); int fs; int i2s_set = 0; @@ -88,11 +88,11 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream, } if (tfa9879->lsb_justified) - snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, + snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1, TFA9879_I2S_SET_MASK, i2s_set << TFA9879_I2S_SET_SHIFT); - snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, + snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1, TFA9879_I2S_FS_MASK, fs << TFA9879_I2S_FS_SHIFT); return 0; @@ -100,9 +100,9 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream, static int tfa9879_digital_mute(struct snd_soc_dai *dai, int mute) { - struct snd_soc_codec *codec = dai->codec; + struct snd_soc_component *component = dai->component; - snd_soc_update_bits(codec, TFA9879_MISC_CONTROL, + snd_soc_component_update_bits(component, TFA9879_MISC_CONTROL, TFA9879_S_MUTE_MASK, !!mute << TFA9879_S_MUTE_SHIFT); @@ -111,8 +111,8 @@ static int tfa9879_digital_mute(struct snd_soc_dai *dai, int mute) static int tfa9879_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) { - struct snd_soc_codec *codec = dai->codec; - struct tfa9879_priv *tfa9879 = snd_soc_codec_get_drvdata(codec); + struct snd_soc_component *component = dai->component; + struct tfa9879_priv *tfa9879 = snd_soc_component_get_drvdata(component); int i2s_set; int sck_pol; @@ -151,10 +151,10 @@ static int tfa9879_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) return -EINVAL; } - snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, + snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1, TFA9879_SCK_POL_MASK, sck_pol << TFA9879_SCK_POL_SHIFT); - snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, + snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1, TFA9879_I2S_SET_MASK, i2s_set << TFA9879_I2S_SET_SHIFT); return 0; @@ -230,15 +230,17 @@ static bool tfa9879_volatile_reg(struct device *dev, unsigned int reg) { "DAC", NULL, "POWER" }, }; -static const struct snd_soc_codec_driver tfa9879_codec = { - .component_driver = { - .controls = tfa9879_controls, - .num_controls = ARRAY_SIZE(tfa9879_controls), - .dapm_widgets = tfa9879_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(tfa9879_dapm_widgets), - .dapm_routes = tfa9879_dapm_routes, - .num_dapm_routes = ARRAY_SIZE(tfa9879_dapm_routes), - }, +static const struct snd_soc_component_driver tfa9879_component = { + .controls = tfa9879_controls, + .num_controls = ARRAY_SIZE(tfa9879_controls), + .dapm_widgets = tfa9879_dapm_widgets, + .num_dapm_widgets = ARRAY_SIZE(tfa9879_dapm_widgets), + .dapm_routes = tfa9879_dapm_routes, + .num_dapm_routes = ARRAY_SIZE(tfa9879_dapm_routes), + .idle_bias_on = 1, + .use_pmdown_time = 1, + .endianness = 1, + .non_legacy_dai_naming = 1, }; static const struct regmap_config tfa9879_regmap = { @@ -295,17 +297,10 @@ static int tfa9879_i2c_probe(struct i2c_client *i2c, regmap_write(tfa9879->regmap, tfa9879_regs[i].reg, tfa9879_regs[i].def); - return snd_soc_register_codec(&i2c->dev, &tfa9879_codec, + return devm_snd_soc_register_component(&i2c->dev, &tfa9879_component, &tfa9879_dai, 1); } -static int tfa9879_i2c_remove(struct i2c_client *client) -{ - snd_soc_unregister_codec(&client->dev); - - return 0; -} - static const struct i2c_device_id tfa9879_i2c_id[] = { { "tfa9879", 0 }, { } @@ -324,7 +319,6 @@ static int tfa9879_i2c_remove(struct i2c_client *client) .of_match_table = tfa9879_of_match, }, .probe = tfa9879_i2c_probe, - .remove = tfa9879_i2c_remove, .id_table = tfa9879_i2c_id, };