Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp330343ybz; Fri, 17 Apr 2020 01:52:19 -0700 (PDT) X-Google-Smtp-Source: APiQypJrHNWSFQx2afipCMbI6kVGi9U5PGDtmOc2VST2iDgRJiWVXLWMFgrzUV12PhZRWPV8zG+P X-Received: by 2002:a17:906:af94:: with SMTP id mj20mr1908750ejb.347.1587113539209; Fri, 17 Apr 2020 01:52:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587113539; cv=none; d=google.com; s=arc-20160816; b=qQt78uZZFEcGIZRkugoyss8b076fuXQ9na4HSYT/v9W2VdB9fHtNw3WO/49w8Al3sX rUH6kiLENJtnrsBtuAqgmPV1s9eFVaIicfUOQf2baWN9oQsPSO47d03qqh/PsMkFlu+7 zApDkvohhy2Drkr3L3BdcZCzMTeGiFNWtf6QFjIIXqcc0iMc+YSR72XJvaJUdEBYkjYD 04QBBsuZNc0XZhgvTYlHk4w7dhcH5hbKQP2kFgsmOPOpB6JgU/7oNTs9iNqHgFbWFw94 PhFVW6uczPHIPlwq2iHb0Ceg9xeCOLw+8ulQKj2TmWv41iflVksxbTg6mybrs9s0ORRb SXZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:ironport-sdr:ironport-sdr; bh=2yIts5c8gFePM2RV7jvB9X4NSVVOmW3k0T/+C6UcCVE=; b=daDWAlDEvTpIGt1G1A05NssC5HmEX9bCrLZ3GVZKAizkZlcT5CdQeKoo5EnfEIArPB esP5bKvd4rkjEpXFguCg+thKWNu6filxmbIWcY6IOYY8tBhcvvmAr/LahmJDgJY2uT6K jXzfaLg2I9ccsItqx5dVis+95my0T/NU93a8qmagJeOS8d31Ko3h5eW1YEgFD8mCDx9D xV5F5aPTOP78UD53criomd/xx44tL4qgxxH1chrMrl3mVdqDqE86FL9OsAeU5NueMySM 3pQ9SUYgOtOd6mRjOzjWZEOyZKxsKX1cPKCknFDRGauT+XOUkwuVbK+L40kTvXMkjB++ grsg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m15si14282297ejj.510.2020.04.17.01.51.56; Fri, 17 Apr 2020 01:52:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730016AbgDQIuq (ORCPT + 99 others); Fri, 17 Apr 2020 04:50:46 -0400 Received: from mga09.intel.com ([134.134.136.24]:7443 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729999AbgDQIuo (ORCPT ); Fri, 17 Apr 2020 04:50:44 -0400 IronPort-SDR: ejg7Cqkvtcg6iQeeOLMNpGKaFaCvEuMXNq1iwvtnCwCb8vL75WYr2G1tl2aCIPHkWj1ayrNNoF F5p+G2y6vL9w== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Apr 2020 01:50:43 -0700 IronPort-SDR: eHkGFsODeVk6ccqqIrfKNikSmVZWurLcpVNwoIntVeG1AKObP+8382x1fclOfzQkFrK7z910ql WKWy9Cmrwqlg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,394,1580803200"; d="scan'208";a="454661488" Received: from bard-ubuntu.sh.intel.com ([10.239.13.33]) by fmsmga005.fm.intel.com with ESMTP; 17 Apr 2020 01:50:39 -0700 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: linux-kernel@vger.kernel.org, tiwai@suse.de, broonie@kernel.org, gregkh@linuxfoundation.org, jank@cadence.com, srinivas.kandagatla@linaro.org, rander.wang@linux.intel.com, ranjani.sridharan@linux.intel.com, hui.wang@canonical.com, pierre-louis.bossart@linux.intel.com, sanyog.r.kale@intel.com, slawomir.blauciak@intel.com, mengdong.lin@intel.com Subject: [RFC 4/5] soundwire: qcom: add sdw_master_device support Date: Fri, 17 Apr 2020 04:55:23 +0800 Message-Id: <20200416205524.2043-5-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200416205524.2043-1-yung-chuan.liao@linux.intel.com> References: <20200416205524.2043-1-yung-chuan.liao@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pierre-Louis Bossart Add new device as a child of the platform device, following the following hierarchy: platform_device sdw_master_device sdw_slave0 ... sdw_slaveN For the Qualcomm implementation no sdw_link_ops are provided. All the dais have to be registered using the platform_device and all power management is handled at the platform device level. Signed-off-by: Pierre-Louis Bossart Signed-off-by: Bard Liao --- drivers/soundwire/qcom.c | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index e08a17c13f92..96306044aa84 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -89,6 +89,7 @@ struct qcom_swrm_port_config { struct qcom_swrm_ctrl { struct sdw_bus bus; struct device *dev; + struct sdw_master_device *md; struct regmap *regmap; struct completion *comp; struct work_struct slave_work; @@ -746,7 +747,7 @@ static int qcom_swrm_probe(struct platform_device *pdev) struct sdw_master_prop *prop; struct sdw_bus_params *params; struct qcom_swrm_ctrl *ctrl; - int ret; + int ret, err; u32 val; ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL); @@ -784,14 +785,34 @@ static int qcom_swrm_probe(struct platform_device *pdev) mutex_init(&ctrl->port_lock); INIT_WORK(&ctrl->slave_work, qcom_swrm_slave_wq); - ctrl->bus.dev = dev; + /* + * add sdw_master_device. + * For the Qualcomm implementation there is no driver. + */ + ctrl->md = sdw_master_device_add(dev, /* platform device is parent */ + dev->fwnode, + NULL, /* no link ops */ + 0, /* only one link supported */ + NULL); /* no context */ + if (IS_ERR(ctrl->md)) { + dev_err(dev, "Could not create sdw_master_device\n"); + ret = PTR_ERR(ctrl->md); + goto err_clk; + } + + /* add bus handle */ + ctrl->md->bus = &ctrl->bus; + + /* the bus uses the sdw_master_device, not the platform device */ + ctrl->bus.dev = &ctrl->md->dev; + ctrl->bus.ops = &qcom_swrm_ops; ctrl->bus.port_ops = &qcom_swrm_port_ops; ctrl->bus.compute_params = &qcom_swrm_compute_params; ret = qcom_swrm_get_port_config(ctrl); if (ret) - goto err_clk; + goto err_md; params = &ctrl->bus.params; params->max_dr_freq = DEFAULT_CLK_FREQ; @@ -818,14 +839,14 @@ static int qcom_swrm_probe(struct platform_device *pdev) "soundwire", ctrl); if (ret) { dev_err(dev, "Failed to request soundwire irq\n"); - goto err_clk; + goto err_md; } ret = sdw_add_bus_master(&ctrl->bus); if (ret) { dev_err(dev, "Failed to register Soundwire controller (%d)\n", ret); - goto err_clk; + goto err_md; } qcom_swrm_init(ctrl); @@ -841,6 +862,10 @@ static int qcom_swrm_probe(struct platform_device *pdev) err_master_add: sdw_delete_bus_master(&ctrl->bus); +err_md: + err = sdw_master_device_del(ctrl->md); + if (err < 0) /* log but return initial status */ + dev_err(dev, "master device del failed %d\n", err); err_clk: clk_disable_unprepare(ctrl->hclk); err_init: @@ -850,8 +875,12 @@ static int qcom_swrm_probe(struct platform_device *pdev) static int qcom_swrm_remove(struct platform_device *pdev) { struct qcom_swrm_ctrl *ctrl = dev_get_drvdata(&pdev->dev); + int err; sdw_delete_bus_master(&ctrl->bus); + err = sdw_master_device_del(ctrl->md); + if (err < 0) + dev_err(&pdev->dev, "master device del failed %d\n", err); clk_disable_unprepare(ctrl->hclk); return 0; -- 2.17.1