From patchwork Tue Dec 4 18:33:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akshu Agrawal X-Patchwork-Id: 10712369 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5F63C13A4 for ; Tue, 4 Dec 2018 18:33:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 52A3F2C3E4 for ; Tue, 4 Dec 2018 18:33:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 475AF2C434; Tue, 4 Dec 2018 18:33:29 +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.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,MISSING_HEADERS,RCVD_IN_DNSWL_NONE 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 689D12C3E4 for ; Tue, 4 Dec 2018 18:33:28 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 2A83F267B61; Tue, 4 Dec 2018 19:33:27 +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 22D45267B73; Tue, 4 Dec 2018 19:33:24 +0100 (CET) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-eopbgr750051.outbound.protection.outlook.com [40.107.75.51]) by alsa0.perex.cz (Postfix) with ESMTP id 4F915267B4E for ; Tue, 4 Dec 2018 19:33:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0/HnY920aSoED7Sp4b4ntYVwVWA+mVzTFSbBy55W+xo=; b=kp6wDOwkojb2F+4ZjmyHZ5u7/AvQqzKl3P0T5x3Xng0iknpEL9qz7zP6pEkX20RHkm/U93CE2RqNx6uArv5kY197uKJKVUIhOZbRIz778g79cdddUxwtOsf4VNXd8i25pEaqPrxe+co/fuHW1VZ31UsLADubS2ePZzv4sISOSB8= Received: from BL0PR12MB2355.namprd12.prod.outlook.com (52.132.10.161) by BL0PR12MB2562.namprd12.prod.outlook.com (52.132.27.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1382.22; Tue, 4 Dec 2018 18:33:14 +0000 Received: from BL0PR12MB2355.namprd12.prod.outlook.com ([fe80::6d6b:9a9e:71b6:1c0e]) by BL0PR12MB2355.namprd12.prod.outlook.com ([fe80::6d6b:9a9e:71b6:1c0e%3]) with mapi id 15.20.1382.020; Tue, 4 Dec 2018 18:33:14 +0000 From: "Agrawal, Akshu" Thread-Topic: [PATCH 1/2] ASoC: Fix function return type Thread-Index: AQHUi//Ro7UpefvJDUiblqpXWVc9pw== Date: Tue, 4 Dec 2018 18:33:14 +0000 Message-ID: <1543948103-20752-1-git-send-email-akshu.agrawal@amd.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BMXPR01CA0048.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:c::34) To BL0PR12MB2355.namprd12.prod.outlook.com (2603:10b6:207:4c::33) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Akshu.Agrawal@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.156.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BL0PR12MB2562; 20:1V/ts1If/RTrXtx8kzcS0UqyzDg0mgxxAx3/E0IXcUAtpiSYHMQhrlfG1hjM9f6GMNQl8VBzaySF/KauvF49P23cfaPuJQb7u+0Uk75PqdWRUhgIXrJCkq1kiuBGfEPqtoX3i2ob/kQXp1SsPgbTLhdlzg5JrRmIPSIkBRgMUHQGMbc0Y2nl92EnbK9UXGAfKyE43TKV5Uo7e+ubOicgGBTZOV2sRzx7qB5fQwMz4B9axJ/o3UpEPr8kHZCofy+6 x-ms-office365-filtering-correlation-id: 6c9cb9f4-5fe9-483a-3f2c-08d65a16f34f x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:BL0PR12MB2562; x-ms-traffictypediagnostic: BL0PR12MB2562: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(10201501046)(3231455)(999002)(944501493)(52105112)(6055026)(148016)(149066)(150057)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:BL0PR12MB2562; BCL:0; PCL:0; RULEID:; SRVR:BL0PR12MB2562; x-forefront-prvs: 0876988AF0 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(136003)(366004)(39860400002)(396003)(346002)(189003)(199004)(86362001)(6436002)(81166006)(81156014)(6486002)(14454004)(7736002)(8936002)(36756003)(305945005)(71190400001)(256004)(97736004)(71200400001)(102836004)(1671002)(25786009)(26005)(106356001)(39060400002)(2616005)(68736007)(105586002)(486006)(6512007)(186003)(59246006)(53936002)(4326008)(109986005)(8676002)(54906003)(316002)(99286004)(52116002)(5660300001)(72206003)(478600001)(386003)(476003)(66066001)(6506007)(2906002)(6116002)(3846002); DIR:OUT; SFP:1101; SCL:1; SRVR:BL0PR12MB2562; H:BL0PR12MB2355.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: QZ5X/qbG9oWm5uNO+laXYyCQaRAzMtth3nxX7wB586Kxbigo77FwptNquSQclHYRGObE/IGaCMfTfGIsDoxhQQKl2A3ngsh6Zl/Em+4g0FaCKkGUZ0zgF8OZqPlXGW4ASBt/RSMtVwpZhsZYIWsz0sqPvxNz6z+tnnJMA0t5vy/ADnPmxs92/RlwyT6+fvfPj0BldnWTMcfiOtAMvrqSmb5vLeu1Y08Py2n/uG6Oln4Dgb19+LEEdisVkEyvhJROiI0RFJwcn+qNeydH32bP/NuF7wh6BEzQZ/bKpUCUcXm0i2QQnrzifGnSwBWYmFXsZxV0PmFhpUtqxum86XkvAf24jaSHKiKfzrQzPNfZryk= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c9cb9f4-5fe9-483a-3f2c-08d65a16f34f X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Dec 2018 18:33:14.3625 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB2562 Cc: "moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." , open list , Takashi Iwai , Liam Girdwood , "djkurtz@chromium.org" , "Agrawal, Akshu" , "Adam.Thomson@diasemi.com" , Mark Brown , "Deucher, Alexander" Subject: [alsa-devel] [PATCH 1/2] ASoC: Fix function return type 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 Function returns -1 on error and the return type should be int. Signed-off-by: Akshu Agrawal --- include/sound/soc.h | 2 +- sound/soc/soc-io.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/sound/soc.h b/include/sound/soc.h index 8ec1de8..591d743 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -1341,7 +1341,7 @@ static inline int snd_soc_component_cache_sync( /* component IO */ int snd_soc_component_read(struct snd_soc_component *component, unsigned int reg, unsigned int *val); -unsigned int snd_soc_component_read32(struct snd_soc_component *component, +int snd_soc_component_read32(struct snd_soc_component *component, unsigned int reg); int snd_soc_component_write(struct snd_soc_component *component, unsigned int reg, unsigned int val); diff --git a/sound/soc/soc-io.c b/sound/soc/soc-io.c index 1ff9175..d08f5b1 100644 --- a/sound/soc/soc-io.c +++ b/sound/soc/soc-io.c @@ -38,7 +38,7 @@ int snd_soc_component_read(struct snd_soc_component *component, } EXPORT_SYMBOL_GPL(snd_soc_component_read); -unsigned int snd_soc_component_read32(struct snd_soc_component *component, +int snd_soc_component_read32(struct snd_soc_component *component, unsigned int reg) { unsigned int val; From patchwork Tue Dec 4 18:36:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akshu Agrawal X-Patchwork-Id: 10712375 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 39291109C for ; Tue, 4 Dec 2018 18:36:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 26CEF2BBFA for ; Tue, 4 Dec 2018 18:36:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1A34C2C36B; Tue, 4 Dec 2018 18:36:18 +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.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,MISSING_HEADERS,RCVD_IN_DNSWL_NONE 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 740A92BBFA for ; Tue, 4 Dec 2018 18:36:16 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id F369B267B82; Tue, 4 Dec 2018 19:36:14 +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 3C461267B88; Tue, 4 Dec 2018 19:36:12 +0100 (CET) Received: from NAM04-BN3-obe.outbound.protection.outlook.com (mail-eopbgr680080.outbound.protection.outlook.com [40.107.68.80]) by alsa0.perex.cz (Postfix) with ESMTP id 11831267B73 for ; Tue, 4 Dec 2018 19:36:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xUfNx8lJgisyOHae8bNphgYHHrNLNg/h80c5PjSarBc=; b=UC/qIaonOUvupAsX1s110LamcVjjEXVN8jUJOm1MycyQcplAcZwURg/PfAsihSB3NEoBAhm/qaApro6QQsLy2kzFeAmZfCQEoms1H247FUM1dVNVY+4QZ3uJ+xrGmykYdIxr9NiMP78oEbvmn+uegOQER7rAKmDtVCyuWqrubkA= Received: from BL0PR12MB2355.namprd12.prod.outlook.com (52.132.10.161) by BL0PR12MB2818.namprd12.prod.outlook.com (20.177.207.225) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1382.22; Tue, 4 Dec 2018 18:36:03 +0000 Received: from BL0PR12MB2355.namprd12.prod.outlook.com ([fe80::6d6b:9a9e:71b6:1c0e]) by BL0PR12MB2355.namprd12.prod.outlook.com ([fe80::6d6b:9a9e:71b6:1c0e%3]) with mapi id 15.20.1382.020; Tue, 4 Dec 2018 18:36:03 +0000 From: "Agrawal, Akshu" Thread-Topic: [PATCH 2/2] ASoC: DA7219: Implement error check on reg read and write Thread-Index: AQHUjAA1pkprxJ5jBUexKsgFP0xI0Q== Date: Tue, 4 Dec 2018 18:36:03 +0000 Message-ID: <1543948103-20752-2-git-send-email-akshu.agrawal@amd.com> References: <1543948103-20752-1-git-send-email-akshu.agrawal@amd.com> In-Reply-To: <1543948103-20752-1-git-send-email-akshu.agrawal@amd.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BMXPR01CA0048.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:c::34) To BL0PR12MB2355.namprd12.prod.outlook.com (2603:10b6:207:4c::33) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Akshu.Agrawal@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.156.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BL0PR12MB2818; 20:a41w/bfaB9XNQCINcWrsLn+z7dDp5UmKHmLcVdxRc/ouiMv8HYo4/X7AA2uZKAjxrwMr1l+bTaYdr0f2VMwHHdSGyyP4u7PY/k0Vk2GGBb8rozVwpwcJiOizaDZQuHp1j+b8lQ4DzM47meOmqqwu9vhnx8wJBJBlL50Rjp9RQm6uFrQeWI3j7yYGob9laGYALEM7ZqLc6JjdrrC0uzqPHIBl/rucF8QfNNiB+gsgBimPbT2N5MVNCvTd6HNe/Ob4 x-ms-office365-filtering-correlation-id: d5792f1e-fbd0-45d6-216e-08d65a1757ef x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BL0PR12MB2818; x-ms-traffictypediagnostic: BL0PR12MB2818: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231455)(999002)(944501493)(52105112)(3002001)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BL0PR12MB2818; BCL:0; PCL:0; RULEID:; SRVR:BL0PR12MB2818; x-forefront-prvs: 0876988AF0 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(376002)(136003)(396003)(39860400002)(346002)(199004)(189003)(97736004)(6486002)(6512007)(6436002)(53946003)(109986005)(478600001)(8676002)(53936002)(8936002)(86362001)(68736007)(4326008)(25786009)(39060400002)(54906003)(14454004)(72206003)(14444005)(5660300001)(36756003)(102836004)(26005)(476003)(486006)(305945005)(105586002)(186003)(106356001)(551934003)(81166006)(7736002)(76176011)(59246006)(3846002)(256004)(6506007)(4744004)(6116002)(386003)(99286004)(71200400001)(81156014)(1671002)(2906002)(71190400001)(66066001)(52116002)(446003)(11346002)(316002)(2616005)(66946006)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:BL0PR12MB2818; H:BL0PR12MB2355.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: m/0sN2ghrw7RoRdZUCFAGx7WXT7HuNfgTqeUdO86DXmDfSfq5rz7p0JLOYZmHkM2qNmbUzd2LAky8+RbqV6QBZU8FPt8BsCFO1gF3TFXlEEyg1nNjgz3SBlf32OOXuDzbhFMSdZrHj394f66oElPIda9YMiasMBgZYZGmabdhBTqA9FGmHLWI6nhADXKDbLgMV1NDyKMnIi/9JcQ43g18qXZo/wLUJ4fqIuXgbUtmXuO4lm1KmcqAmeBMr+TO4YHZ5L/rQH4LalIOa/g1xOi0wfj21pX6n78lXAnFGMTVieDaFT2cR8aTz0k3E3GM8CKBcpsvwN01+TxVqqdzu0Z3g85TLHhLaOhwAJcDfKsE7c= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: d5792f1e-fbd0-45d6-216e-08d65a1757ef X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Dec 2018 18:36:03.0474 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB2818 Cc: "moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." , Support Opensource , open list , Takashi Iwai , Liam Girdwood , "djkurtz@chromium.org" , "Agrawal, Akshu" , "Adam.Thomson@diasemi.com" , Mark Brown , "Deucher, Alexander" Subject: [alsa-devel] [PATCH 2/2] ASoC: DA7219: Implement error check on reg read and write 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 Failed i2c transaction can lead to failure in reg read or write. Need to have error check for each read write operation. Signed-off-by: Akshu Agrawal --- sound/soc/codecs/da7219.c | 323 +++++++++++++++++++++++++++++++++++----------- sound/soc/codecs/da7219.h | 2 +- 2 files changed, 247 insertions(+), 78 deletions(-) diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c index e46e9f4..6757129 100644 --- a/sound/soc/codecs/da7219.c +++ b/sound/soc/codecs/da7219.c @@ -312,69 +312,103 @@ static int da7219_enum_locked_put(struct snd_kcontrol *kcontrol, } /* ALC */ -static void da7219_alc_calib(struct snd_soc_component *component) +static int da7219_alc_calib(struct snd_soc_component *component) { - u8 mic_ctrl, mixin_ctrl, adc_ctrl, calib_ctrl; + int mic_ctrl, mixin_ctrl, adc_ctrl, calib_ctrl; + int ret; /* Save current state of mic control register */ mic_ctrl = snd_soc_component_read32(component, DA7219_MIC_1_CTRL); + if (mic_ctrl < 0) + return mic_ctrl; /* Save current state of input mixer control register */ mixin_ctrl = snd_soc_component_read32(component, DA7219_MIXIN_L_CTRL); + if (mixin_ctrl < 0) + return mixin_ctrl; /* Save current state of input ADC control register */ adc_ctrl = snd_soc_component_read32(component, DA7219_ADC_L_CTRL); + if (adc_ctrl < 0) + return adc_ctrl; /* Enable then Mute MIC PGAs */ - snd_soc_component_update_bits(component, DA7219_MIC_1_CTRL, DA7219_MIC_1_AMP_EN_MASK, + ret = snd_soc_component_update_bits(component, DA7219_MIC_1_CTRL, + DA7219_MIC_1_AMP_EN_MASK, DA7219_MIC_1_AMP_EN_MASK); - snd_soc_component_update_bits(component, DA7219_MIC_1_CTRL, + if (ret < 0) + return ret; + + ret = snd_soc_component_update_bits(component, DA7219_MIC_1_CTRL, DA7219_MIC_1_AMP_MUTE_EN_MASK, DA7219_MIC_1_AMP_MUTE_EN_MASK); + if (ret < 0) + return ret; /* Enable input mixers unmuted */ - snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, DA7219_MIXIN_L_AMP_EN_MASK | DA7219_MIXIN_L_AMP_MUTE_EN_MASK, DA7219_MIXIN_L_AMP_EN_MASK); + if (ret < 0) + return ret; /* Enable input filters unmuted */ - snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, DA7219_ADC_L_MUTE_EN_MASK | DA7219_ADC_L_EN_MASK, DA7219_ADC_L_EN_MASK); + if (ret < 0) + return ret; /* Perform auto calibration */ - snd_soc_component_update_bits(component, DA7219_ALC_CTRL1, + ret = snd_soc_component_update_bits(component, DA7219_ALC_CTRL1, DA7219_ALC_AUTO_CALIB_EN_MASK, DA7219_ALC_AUTO_CALIB_EN_MASK); + if (ret < 0) + return ret; do { calib_ctrl = snd_soc_component_read32(component, DA7219_ALC_CTRL1); + if (calib_ctrl < 0) + return calib_ctrl; } while (calib_ctrl & DA7219_ALC_AUTO_CALIB_EN_MASK); /* If auto calibration fails, disable DC offset, hybrid ALC */ if (calib_ctrl & DA7219_ALC_CALIB_OVERFLOW_MASK) { dev_warn(component->dev, "ALC auto calibration failed with overflow\n"); - snd_soc_component_update_bits(component, DA7219_ALC_CTRL1, + ret = snd_soc_component_update_bits(component, DA7219_ALC_CTRL1, DA7219_ALC_OFFSET_EN_MASK | DA7219_ALC_SYNC_MODE_MASK, 0); + if (ret < 0) + return ret; } else { /* Enable DC offset cancellation, hybrid mode */ - snd_soc_component_update_bits(component, DA7219_ALC_CTRL1, + ret = snd_soc_component_update_bits(component, DA7219_ALC_CTRL1, DA7219_ALC_OFFSET_EN_MASK | DA7219_ALC_SYNC_MODE_MASK, DA7219_ALC_OFFSET_EN_MASK | DA7219_ALC_SYNC_MODE_MASK); + if (ret < 0) + return ret; } /* Restore input filter control register to original state */ - snd_soc_component_write(component, DA7219_ADC_L_CTRL, adc_ctrl); + ret = snd_soc_component_write(component, DA7219_ADC_L_CTRL, adc_ctrl); + if (ret < 0) + return ret; /* Restore input mixer control registers to original state */ - snd_soc_component_write(component, DA7219_MIXIN_L_CTRL, mixin_ctrl); + ret = snd_soc_component_write(component, DA7219_MIXIN_L_CTRL, + mixin_ctrl); + if (ret < 0) + return ret; /* Restore MIC control registers to original states */ - snd_soc_component_write(component, DA7219_MIC_1_CTRL, mic_ctrl); + ret = snd_soc_component_write(component, DA7219_MIC_1_CTRL, mic_ctrl); + if (ret < 0) + return ret; + + return 0; } static int da7219_mixin_gain_put(struct snd_kcontrol *kcontrol, @@ -391,7 +425,7 @@ static int da7219_mixin_gain_put(struct snd_kcontrol *kcontrol, * make sure calibrated offsets are updated. */ if ((ret == 1) && (da7219->alc_en)) - da7219_alc_calib(component); + ret = da7219_alc_calib(component); return ret; } @@ -401,11 +435,14 @@ static int da7219_alc_sw_put(struct snd_kcontrol *kcontrol, { struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); + int ret; /* Force ALC offset calibration if enabling ALC */ if ((ucontrol->value.integer.value[0]) && (!da7219->alc_en)) { - da7219_alc_calib(component); + ret = da7219_alc_calib(component); + if (ret < 0) + return ret; da7219->alc_en = true; } else { da7219->alc_en = false; @@ -813,16 +850,20 @@ static int da7219_dai_event(struct snd_soc_dapm_widget *w, return ret; } } else { - snd_soc_component_update_bits(component, + ret = snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, DA7219_DAI_CLK_EN_MASK, DA7219_DAI_CLK_EN_MASK); + if (ret < 0) + return ret; } } /* PC synchronised to DAI */ - snd_soc_component_update_bits(component, DA7219_PC_COUNT, + ret = snd_soc_component_update_bits(component, DA7219_PC_COUNT, DA7219_PC_FREERUN_MASK, 0); + if (ret < 0) + return ret; /* Slave mode, if SRM not enabled no need for status checks */ pll_ctrl = snd_soc_component_read32(component, DA7219_PLL_CTRL); @@ -846,19 +887,23 @@ static int da7219_dai_event(struct snd_soc_dapm_widget *w, return 0; case SND_SOC_DAPM_POST_PMD: /* PC free-running */ - snd_soc_component_update_bits(component, DA7219_PC_COUNT, + ret = snd_soc_component_update_bits(component, DA7219_PC_COUNT, DA7219_PC_FREERUN_MASK, DA7219_PC_FREERUN_MASK); + if (ret < 0) + return ret; /* Disable DAI clks if in master mode */ if (da7219->master) { if (da7219->dai_clks) clk_disable_unprepare(da7219->dai_clks); else - snd_soc_component_update_bits(component, + ret = snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, DA7219_DAI_CLK_EN_MASK, 0); + if (ret < 0) + return ret; } return 0; @@ -887,6 +932,7 @@ static int da7219_mixout_event(struct snd_soc_dapm_widget *w, { struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); u8 hp_ctrl, min_gain_mask; + int ret; switch (w->reg) { case DA7219_MIXOUT_L_CTRL: @@ -904,15 +950,20 @@ static int da7219_mixout_event(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_PRE_PMD: /* Enable minimum gain on HP to avoid pops */ - snd_soc_component_update_bits(component, hp_ctrl, min_gain_mask, - min_gain_mask); + ret = snd_soc_component_update_bits(component, hp_ctrl, + min_gain_mask, min_gain_mask); + if (ret < 0) + return ret; msleep(DA7219_MIN_GAIN_DELAY); break; case SND_SOC_DAPM_POST_PMU: /* Remove minimum gain on HP */ - snd_soc_component_update_bits(component, hp_ctrl, min_gain_mask, 0); + ret = snd_soc_component_update_bits(component, hp_ctrl, + min_gain_mask, 0); + if (ret < 0) + return ret; break; } @@ -925,21 +976,29 @@ static int da7219_gain_ramp_event(struct snd_soc_dapm_widget *w, { struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); + int ret; switch (event) { case SND_SOC_DAPM_PRE_PMU: case SND_SOC_DAPM_PRE_PMD: /* Ensure nominal gain ramping for DAPM sequence */ - da7219->gain_ramp_ctrl = - snd_soc_component_read32(component, DA7219_GAIN_RAMP_CTRL); - snd_soc_component_write(component, DA7219_GAIN_RAMP_CTRL, - DA7219_GAIN_RAMP_RATE_NOMINAL); + da7219->gain_ramp_ctrl = snd_soc_component_read32(component, + DA7219_GAIN_RAMP_CTRL); + if (da7219->gain_ramp_ctrl < 0) + return da7219->gain_ramp_ctrl; + ret = snd_soc_component_write(component, + DA7219_GAIN_RAMP_CTRL, + DA7219_GAIN_RAMP_RATE_NOMINAL); + if (ret < 0) + return ret; break; case SND_SOC_DAPM_POST_PMU: case SND_SOC_DAPM_POST_PMD: /* Restore previous gain ramp settings */ - snd_soc_component_write(component, DA7219_GAIN_RAMP_CTRL, + ret = snd_soc_component_write(component, DA7219_GAIN_RAMP_CTRL, da7219->gain_ramp_ctrl); + if (ret < 0) + return ret; break; } @@ -1177,13 +1236,17 @@ static int da7219_set_dai_sysclk(struct snd_soc_dai *codec_dai, switch (clk_id) { case DA7219_CLKSRC_MCLK_SQR: - snd_soc_component_update_bits(component, DA7219_PLL_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_PLL_CTRL, DA7219_PLL_MCLK_SQR_EN_MASK, DA7219_PLL_MCLK_SQR_EN_MASK); + if (ret < 0) + return ret; break; case DA7219_CLKSRC_MCLK: - snd_soc_component_update_bits(component, DA7219_PLL_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_PLL_CTRL, DA7219_PLL_MCLK_SQR_EN_MASK, 0); + if (ret < 0) + return ret; break; default: dev_err(codec_dai->dev, "Unknown clock source %d\n", clk_id); @@ -1219,6 +1282,7 @@ int da7219_set_pll(struct snd_soc_component *component, int source, unsigned int u8 pll_frac_top, pll_frac_bot, pll_integer; u32 freq_ref; u64 frac_div; + int ret; /* Verify 2MHz - 54MHz MCLK provided, and set input divider */ if (da7219->mclk_rate < 2000000) { @@ -1252,9 +1316,11 @@ int da7219_set_pll(struct snd_soc_component *component, int source, unsigned int switch (source) { case DA7219_SYSCLK_MCLK: pll_ctrl |= DA7219_PLL_MODE_BYPASS; - snd_soc_component_update_bits(component, DA7219_PLL_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_PLL_CTRL, DA7219_PLL_INDIV_MASK | DA7219_PLL_MODE_MASK, pll_ctrl); + if (ret < 0) + return ret; return 0; case DA7219_SYSCLK_PLL: pll_ctrl |= DA7219_PLL_MODE_NORMAL; @@ -1275,12 +1341,23 @@ int da7219_set_pll(struct snd_soc_component *component, int source, unsigned int pll_frac_bot = (frac_div) & DA7219_BYTE_MASK; /* Write PLL config & dividers */ - snd_soc_component_write(component, DA7219_PLL_FRAC_TOP, pll_frac_top); - snd_soc_component_write(component, DA7219_PLL_FRAC_BOT, pll_frac_bot); - snd_soc_component_write(component, DA7219_PLL_INTEGER, pll_integer); - snd_soc_component_update_bits(component, DA7219_PLL_CTRL, + ret = snd_soc_component_write(component, DA7219_PLL_FRAC_TOP, + pll_frac_top); + if (ret < 0) + return ret; + ret = snd_soc_component_write(component, DA7219_PLL_FRAC_BOT, + pll_frac_bot); + if (ret < 0) + return ret; + ret = snd_soc_component_write(component, DA7219_PLL_INTEGER, + pll_integer); + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_PLL_CTRL, DA7219_PLL_INDIV_MASK | DA7219_PLL_MODE_MASK, pll_ctrl); + if (ret < 0) + return ret; return 0; } @@ -1304,6 +1381,7 @@ static int da7219_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) struct snd_soc_component *component = codec_dai->component; struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); u8 dai_clk_mode = 0, dai_ctrl = 0; + int ret; switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { case SND_SOC_DAIFMT_CBM_CFM: @@ -1379,12 +1457,16 @@ static int da7219_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) /* By default 64 BCLKs per WCLK is supported */ dai_clk_mode |= DA7219_DAI_BCLKS_PER_WCLK_64; - snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, + ret = snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, DA7219_DAI_BCLKS_PER_WCLK_MASK | DA7219_DAI_CLK_POL_MASK | DA7219_DAI_WCLK_POL_MASK, dai_clk_mode); - snd_soc_component_update_bits(component, DA7219_DAI_CTRL, DA7219_DAI_FORMAT_MASK, - dai_ctrl); + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_DAI_CTRL, + DA7219_DAI_FORMAT_MASK, dai_ctrl); + if (ret < 0) + return ret; return 0; } @@ -1398,15 +1480,22 @@ static int da7219_set_dai_tdm_slot(struct snd_soc_dai *dai, u8 dai_bclks_per_wclk; u16 offset; u32 frame_size; + int ret; /* No channels enabled so disable TDM, revert to 64-bit frames */ if (!tx_mask) { - snd_soc_component_update_bits(component, DA7219_DAI_TDM_CTRL, + ret = snd_soc_component_update_bits(component, + DA7219_DAI_TDM_CTRL, DA7219_DAI_TDM_CH_EN_MASK | DA7219_DAI_TDM_MODE_EN_MASK, 0); - snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, + DA7219_DAI_CLK_MODE, DA7219_DAI_BCLKS_PER_WCLK_MASK, DA7219_DAI_BCLKS_PER_WCLK_64); + if (ret < 0) + return ret; return 0; } @@ -1444,19 +1533,25 @@ static int da7219_set_dai_tdm_slot(struct snd_soc_dai *dai, return -EINVAL; } - snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, + ret = snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, DA7219_DAI_BCLKS_PER_WCLK_MASK, dai_bclks_per_wclk); + if (ret < 0) + return ret; offset = cpu_to_le16(rx_mask); - regmap_bulk_write(da7219->regmap, DA7219_DAI_OFFSET_LOWER, + ret = regmap_bulk_write(da7219->regmap, DA7219_DAI_OFFSET_LOWER, &offset, sizeof(offset)); + if (ret < 0) + return ret; - snd_soc_component_update_bits(component, DA7219_DAI_TDM_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_DAI_TDM_CTRL, DA7219_DAI_TDM_CH_EN_MASK | DA7219_DAI_TDM_MODE_EN_MASK, (tx_mask << DA7219_DAI_TDM_CH_EN_SHIFT) | DA7219_DAI_TDM_MODE_EN_MASK); + if (ret < 0) + return ret; return 0; } @@ -1468,6 +1563,7 @@ static int da7219_hw_params(struct snd_pcm_substream *substream, struct snd_soc_component *component = dai->component; u8 dai_ctrl = 0, fs; unsigned int channels; + int ret; switch (params_width(params)) { case 16: @@ -1533,11 +1629,15 @@ static int da7219_hw_params(struct snd_pcm_substream *substream, return -EINVAL; } - snd_soc_component_update_bits(component, DA7219_DAI_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_DAI_CTRL, DA7219_DAI_WORD_LENGTH_MASK | DA7219_DAI_CH_NUM_MASK, dai_ctrl); - snd_soc_component_write(component, DA7219_SR, fs); + if (ret < 0) + return ret; + ret = snd_soc_component_write(component, DA7219_SR, fs); + if (ret < 0) + return ret; return 0; } @@ -1692,9 +1792,12 @@ static int da7219_set_bias_level(struct snd_soc_component *component, case SND_SOC_BIAS_STANDBY: if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) /* Master bias */ - snd_soc_component_update_bits(component, DA7219_REFERENCES, + ret = snd_soc_component_update_bits(component, + DA7219_REFERENCES, DA7219_BIAS_EN_MASK, DA7219_BIAS_EN_MASK); + if (ret < 0) + return ret; if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_PREPARE) { /* Remove MCLK */ @@ -1705,8 +1808,11 @@ static int da7219_set_bias_level(struct snd_soc_component *component, case SND_SOC_BIAS_OFF: /* Only disable master bias if we're not a wake-up source */ if (!da7219->wakeup_source) - snd_soc_component_update_bits(component, DA7219_REFERENCES, + ret = snd_soc_component_update_bits(component, + DA7219_REFERENCES, DA7219_BIAS_EN_MASK, 0); + if (ret < 0) + return ret; break; } @@ -1754,10 +1860,16 @@ static int da7219_handle_supplies(struct snd_soc_component *component) } /* Ensure device in active mode */ - snd_soc_component_write(component, DA7219_SYSTEM_ACTIVE, DA7219_SYSTEM_ACTIVE_MASK); + ret = snd_soc_component_write(component, DA7219_SYSTEM_ACTIVE, + DA7219_SYSTEM_ACTIVE_MASK); + if (ret < 0) + return ret; /* Update IO voltage level range */ - snd_soc_component_write(component, DA7219_IO_CTRL, io_voltage_lvl); + ret = snd_soc_component_write(component, DA7219_IO_CTRL, + io_voltage_lvl); + if (ret < 0) + return ret; return 0; } @@ -1768,10 +1880,13 @@ static int da7219_dai_clks_prepare(struct clk_hw *hw) struct da7219_priv *da7219 = container_of(hw, struct da7219_priv, dai_clks_hw); struct snd_soc_component *component = da7219->aad->component; + int ret; - snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, + ret = snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, DA7219_DAI_CLK_EN_MASK, DA7219_DAI_CLK_EN_MASK); + if (ret < 0) + return ret; return 0; } @@ -1781,9 +1896,12 @@ static void da7219_dai_clks_unprepare(struct clk_hw *hw) struct da7219_priv *da7219 = container_of(hw, struct da7219_priv, dai_clks_hw); struct snd_soc_component *component = da7219->aad->component; + int ret; - snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, + ret = snd_soc_component_update_bits(component, DA7219_DAI_CLK_MODE, DA7219_DAI_CLK_EN_MASK, 0); + if (ret < 0) + dev_err(component->dev, "Failed to disable clk: %d\n", ret); } static int da7219_dai_clks_is_prepared(struct clk_hw *hw) @@ -1791,9 +1909,11 @@ static int da7219_dai_clks_is_prepared(struct clk_hw *hw) struct da7219_priv *da7219 = container_of(hw, struct da7219_priv, dai_clks_hw); struct snd_soc_component *component = da7219->aad->component; - u8 clk_reg; + int clk_reg; clk_reg = snd_soc_component_read32(component, DA7219_DAI_CLK_MODE); + if (clk_reg < 0) + return clk_reg; return !!(clk_reg & DA7219_DAI_CLK_EN_MASK); } @@ -1844,10 +1964,11 @@ static void da7219_register_dai_clks(struct snd_soc_component *component) static inline void da7219_register_dai_clks(struct snd_soc_component *component) {} #endif /* CONFIG_COMMON_CLK */ -static void da7219_handle_pdata(struct snd_soc_component *component) +static int da7219_handle_pdata(struct snd_soc_component *component) { struct da7219_priv *da7219 = snd_soc_component_get_drvdata(component); struct da7219_pdata *pdata = da7219->pdata; + int ret; if (pdata) { u8 micbias_lvl = 0; @@ -1869,7 +1990,10 @@ static void da7219_handle_pdata(struct snd_soc_component *component) break; } - snd_soc_component_write(component, DA7219_MICBIAS_CTRL, micbias_lvl); + ret = snd_soc_component_write(component, DA7219_MICBIAS_CTRL, + micbias_lvl); + if (ret < 0) + return ret; /* * Calculate delay required to compensate for DC offset in @@ -1884,11 +2008,15 @@ static void da7219_handle_pdata(struct snd_soc_component *component) case DA7219_MIC_AMP_IN_SEL_DIFF: case DA7219_MIC_AMP_IN_SEL_SE_P: case DA7219_MIC_AMP_IN_SEL_SE_N: - snd_soc_component_write(component, DA7219_MIC_1_SELECT, - pdata->mic_amp_in_sel); + ret = snd_soc_component_write(component, + DA7219_MIC_1_SELECT, + pdata->mic_amp_in_sel); + if (ret < 0) + return ret; break; } } + return 0; } static struct reg_sequence da7219_rev_aa_patch[] = { @@ -1934,7 +2062,9 @@ static int da7219_probe(struct snd_soc_component *component) if (!da7219->pdata) da7219->pdata = da7219_fw_to_pdata(component); - da7219_handle_pdata(component); + ret = da7219_handle_pdata(component); + if (ret < 0) + return ret; /* Check if MCLK provided */ da7219->mclk = devm_clk_get(component->dev, "mclk"); @@ -1948,36 +2078,57 @@ static int da7219_probe(struct snd_soc_component *component) } /* Default PC counter to free-running */ - snd_soc_component_update_bits(component, DA7219_PC_COUNT, DA7219_PC_FREERUN_MASK, - DA7219_PC_FREERUN_MASK); + ret = snd_soc_component_update_bits(component, DA7219_PC_COUNT, + DA7219_PC_FREERUN_MASK, DA7219_PC_FREERUN_MASK); + if (ret < 0) + return ret; /* Default gain ramping */ - snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_MIXIN_L_CTRL, DA7219_MIXIN_L_AMP_RAMP_EN_MASK, DA7219_MIXIN_L_AMP_RAMP_EN_MASK); - snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, DA7219_ADC_L_RAMP_EN_MASK, - DA7219_ADC_L_RAMP_EN_MASK); - snd_soc_component_update_bits(component, DA7219_DAC_L_CTRL, DA7219_DAC_L_RAMP_EN_MASK, - DA7219_DAC_L_RAMP_EN_MASK); - snd_soc_component_update_bits(component, DA7219_DAC_R_CTRL, DA7219_DAC_R_RAMP_EN_MASK, - DA7219_DAC_R_RAMP_EN_MASK); - snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_ADC_L_CTRL, + DA7219_ADC_L_RAMP_EN_MASK, DA7219_ADC_L_RAMP_EN_MASK); + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_DAC_L_CTRL, + DA7219_DAC_L_RAMP_EN_MASK, DA7219_DAC_L_RAMP_EN_MASK); + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_DAC_R_CTRL, + DA7219_DAC_R_RAMP_EN_MASK, DA7219_DAC_R_RAMP_EN_MASK); + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, DA7219_HP_L_AMP_RAMP_EN_MASK, DA7219_HP_L_AMP_RAMP_EN_MASK); - snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, DA7219_HP_R_AMP_RAMP_EN_MASK, DA7219_HP_R_AMP_RAMP_EN_MASK); + if (ret < 0) + return ret; /* Default minimum gain on HP to avoid pops during DAPM sequencing */ - snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, + ret = snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, DA7219_HP_L_AMP_MIN_GAIN_EN_MASK, DA7219_HP_L_AMP_MIN_GAIN_EN_MASK); - snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, + if (ret < 0) + return ret; + ret = snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, DA7219_HP_R_AMP_MIN_GAIN_EN_MASK, DA7219_HP_R_AMP_MIN_GAIN_EN_MASK); + if (ret < 0) + return ret; /* Default infinite tone gen, start/stop by Kcontrol */ - snd_soc_component_write(component, DA7219_TONE_GEN_CYCLES, DA7219_BEEP_CYCLES_MASK); + ret = snd_soc_component_write(component, DA7219_TONE_GEN_CYCLES, + DA7219_BEEP_CYCLES_MASK); + if (ret < 0) + return ret; /* Initialise AAD block */ ret = da7219_aad_init(component); @@ -2221,16 +2372,28 @@ static int da7219_i2c_probe(struct i2c_client *i2c, regcache_cache_bypass(da7219->regmap, true); /* Disable audio paths if still active from previous start */ - regmap_read(da7219->regmap, DA7219_SYSTEM_ACTIVE, &system_active); + ret = regmap_read(da7219->regmap, DA7219_SYSTEM_ACTIVE, &system_active); + if (ret < 0) + return ret; if (system_active) { - regmap_write(da7219->regmap, DA7219_GAIN_RAMP_CTRL, + ret = regmap_write(da7219->regmap, DA7219_GAIN_RAMP_CTRL, DA7219_GAIN_RAMP_RATE_NOMINAL); - regmap_write(da7219->regmap, DA7219_SYSTEM_MODES_INPUT, 0x00); - regmap_write(da7219->regmap, DA7219_SYSTEM_MODES_OUTPUT, 0x01); + if (ret < 0) + return ret; + ret = regmap_write(da7219->regmap, DA7219_SYSTEM_MODES_INPUT, + 0x00); + if (ret < 0) + return ret; + ret = regmap_write(da7219->regmap, DA7219_SYSTEM_MODES_OUTPUT, + 0x01); + if (ret < 0) + return ret; for (i = 0; i < DA7219_SYS_STAT_CHECK_RETRIES; ++i) { - regmap_read(da7219->regmap, DA7219_SYSTEM_STATUS, + ret = regmap_read(da7219->regmap, DA7219_SYSTEM_STATUS, &system_status); + if (ret < 0) + return ret; if (!system_status) break; @@ -2239,13 +2402,19 @@ static int da7219_i2c_probe(struct i2c_client *i2c, } /* Soft reset component */ - regmap_write_bits(da7219->regmap, DA7219_ACCDET_CONFIG_1, + ret = regmap_write_bits(da7219->regmap, DA7219_ACCDET_CONFIG_1, DA7219_ACCDET_EN_MASK, 0); - regmap_write_bits(da7219->regmap, DA7219_CIF_CTRL, + if (ret < 0) + return ret; + ret = regmap_write_bits(da7219->regmap, DA7219_CIF_CTRL, DA7219_CIF_REG_SOFT_RESET_MASK, DA7219_CIF_REG_SOFT_RESET_MASK); - regmap_write_bits(da7219->regmap, DA7219_SYSTEM_ACTIVE, + if (ret < 0) + return ret; + ret = regmap_write_bits(da7219->regmap, DA7219_SYSTEM_ACTIVE, DA7219_SYSTEM_ACTIVE_MASK, 0); + if (ret < 0) + return ret; regcache_cache_bypass(da7219->regmap, false); diff --git a/sound/soc/codecs/da7219.h b/sound/soc/codecs/da7219.h index 3a00686..0cf78a7 100644 --- a/sound/soc/codecs/da7219.h +++ b/sound/soc/codecs/da7219.h @@ -832,7 +832,7 @@ struct da7219_priv { bool alc_en; bool micbias_on_event; unsigned int mic_pga_delay; - u8 gain_ramp_ctrl; + int gain_ramp_ctrl; }; int da7219_set_pll(struct snd_soc_component *component, int source, unsigned int fout);