From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758040AbcLAMOw (ORCPT ); Thu, 1 Dec 2016 07:14:52 -0500 Received: from mail-db5eur01on0129.outbound.protection.outlook.com ([104.47.2.129]:35328 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755747AbcLAMOv (ORCPT ); Thu, 1 Dec 2016 07:14:51 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; From: Peter Rosin To: CC: Peter Rosin , Rob Herring , Mark Rutland , Liam Girdwood , Mark Brown , Nicolas Ferre , Arnd Bergmann , Greg Kroah-Hartman , Jaroslav Kysela , Takashi Iwai , , , , Subject: [PATCH 1/2] misc: atmel-ssc: register as sound DAI if #sound-dai-cells is present Date: Thu, 1 Dec 2016 12:59:08 +0100 Message-ID: <1480593549-6464-2-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1480593549-6464-1-git-send-email-peda@axentia.se> References: <1480593549-6464-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: DB5PR03CA0081.eurprd03.prod.outlook.com (10.164.34.49) To HE1PR0201MB2315.eurprd02.prod.outlook.com (10.168.145.150) X-MS-Office365-Filtering-Correlation-Id: 3271e7c3-320f-472e-5b5c-08d419e18034 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:HE1PR0201MB2315; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2315;3:+oqiGu49rYLTNWF9t1JwyN8o50qNbIPRgWQqcEpgn7Dm1TmXG1juETtuSp0CAJXCMGlTHjt10te6289Pf512gCR5lAzAlg2HWTVwfnhmCiDhDGN4ezQ9EGlcfQjmqHNbgblyXTc0OWSiTXhgBbd+uc6YnXLO3aN5LZFjp7hy2yXfWSbswWMqcIUXaN0LIgXf5z0vM/DE7WtGm834yjkOkfLpcDpUOUjxz/txubEqqar5JlXVnoJTVsak5m0fKDajUqf0mv/bxTT4YpV4gcq+fA== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2315;25:WMFw/E4yJGN6g/fJTR/Olm/QYCa4TpKy4ymeKEGxGXeNUJGyX30h28LtbCOonLhKF3mnZudEt9gckFykIpid3CgjFd7rH1R28PiinLG8whHxkSQeDF8QFSzipHw+mzB3qlJDNfv+iVZnQTX577eH5FDfcO6kU5qsKcRCDHTzzGy9Kxj1L4jOM2qa+uSeYdH7lGIqvJWXwzB5jqvk+c8cRKnz/4Aw7iViKIFWDZ0cPIhhq0I7CmAiOKUFzLj910OYrd/AnTDVuA4IKj3MBqhwBEymTKfxKtNwuHS1LS0Rk/Ps0KAkZ629gOSbLljip7bMlIpbj+nkBot1vbkZSLOh0onZLwpjS3CJX6Xa6zURSbrbvq0NkG2q+2bssLesWmNi8CyrHJs+JRCvUR0FVjSTyT6ST9FI5EbyaEaiNNsZDsGQtZ8TpFtWGAxnhGJqvu6QzpKj3hJ0FmQyIWXXenN+VPj6lI0OU3FAWp32CxNYHrte56CJ3ORgI8NwbVnWkbtrbgHjTOqiAC+fpXjzhJbWYsFAAnr3+rMSFoFFGngXqXjDzns0KiwpkiQqV2IKOJrD0hQzCaSg19Aqwsu6X0rbVpi0N83ByfB0yfMksu2ZTcOuyWu6rTtmxIe2J6OvFT8JiKJGg9+qGlyy7/3+J0maZBm+RVRqGCFON32YLVDK2vMimjPOWqk0xm0fD+P08d8ezT9G23PjngFAhA7BNeTE8MsRQizCmw5U19n6Tey/ScxNUQ8mjXoqSi578NklVi4mHNNLQZh1YcYWleG/EUehZQY+CpfaVb4Dl8gPoxdjA4DSByC7qJEdPPrz9Q6Ivi8R X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2315;31:PVidi8U7h4liCqQpvkmQ4zoOJM1N4pn+axR3q0SQfLxXcNyoL/7FsH/t41Gb9JNAfDD9dzEM2npWguMYe/R/Z+xVmtZe/VgQ8ZzCc3sd/PK14OxuA2HC/C2sjBYuNew71mNRvJiVJh8YbSp/y1/tUbozykX1+3kzaWWhi8LGIHd7CDVJrmy7HA+KM9359uWyCFcfTjCmbZ7K8PqBNEM3OXpqPo+d108bAEv16XsRCTX9uHw7GJQDNhKwfAFiAnxNOD4eUQcynMQY5lB4cmBd2l4QFSqTiN/qyMrT8qEUbcw=;4:oBqb2MgulwRuDZmZ/dHlRdZRqZq6ixklsqYwUN+i7xpY0gNZJRlUS6rJ6r81RR5O13sqyGyhm/GmgDR6VmBZNeP/JYxrKZqk/EsMdzp8cA2TmlKocrEQmN9L8DEYqyBL3aInK/SoNVYTnbX+OeC5yCWc7QrXdntH/VDckcN+3DoTXiVebWwM7/lgewvCbi/wdd6mAwNZQExUGu3TC/mkSeYFCDZkNCnsawd/7y2JdMxU/9+NgWuYMKyDSvHnwuH95qZY6q3ltDqW6oPuuuCYzVOu3tVUcAktHA2KTMzYywZNOGqtevcwpkDOduYNpEEypr7sd+Cwbc7EItlY/4bZj/QjP6tWf4HjewIG7jUIu4qLBnqsuJ+I1wt7S4Y/B0TBqnl4JJCeWMUuaXFNHbG6J0nq89t5N9+PDKgctvZKhALF8e/tH23kmCtIL7je7xLhucLYpeis8aeNw56pH0swXYvXZNPpOMs0b+73uxEYMc5sURnXlmA11y3RTiBKzwkAgetyy63LNmVQ2mAPllfiA8tv/zax6OlALqKEtIKgbUK+Kgp/LwbvNES/fsdChgDF0NeKyJBc4Ei0ZWnuYF4kcCaPkXYsAHoN2abUz9m5tNOclFGrZy3Ot9E8LsqZo7NR X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(2016111802025)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(6043046)(6072148);SRVR:HE1PR0201MB2315;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0201MB2315; X-Forefront-PRVS: 014304E855 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(7916002)(189002)(199003)(6666003)(575784001)(39060400001)(2950100002)(2351001)(38730400001)(39410400001)(48376002)(39450400002)(2906002)(4326007)(97736004)(6486002)(36756003)(6916009)(8676002)(6116002)(733004)(50466002)(50226002)(92566002)(81156014)(81166006)(7416002)(74482002)(5003940100001)(189998001)(101416001)(33646002)(110136003)(105586002)(305945005)(5660300001)(47776003)(230783001)(7846002)(66066001)(106356001)(3846002)(7736002)(42186005)(86362001)(50986999)(76176999)(68736007)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0201MB2315;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0201MB2315;23:xkyaNh1vK4t1v0WYzx8cPsTjnFTp+6ysHQ8tKwu?= =?us-ascii?Q?EyTCgFy6JQZ+PkduYY5wVYJcwDzsb9vwPwmLnp9CLT3LAgUmsTS3Hwt4OjbZ?= =?us-ascii?Q?WpGO7zsIcT5+L4gEaeyPES7WwvZVt3J+lNH9AuwLlFImyN0HLRxHYLjjJgSC?= =?us-ascii?Q?G0rb8E/51i6mrJw0m89ER810+9FG5uQ6lzkUYOpAw4e+RVE9u5dAAyu3tL6z?= =?us-ascii?Q?4GDsNRJc/5h77O1K0M9Nd413cfrVz76pzsisCYsVtESNPXcZ64j8akooTCFf?= =?us-ascii?Q?9fX+foYwUecH7YnVuuH9MiWgFX0VcEE8TPimrkd6Qi30+1doYk2+eu0U/pxq?= =?us-ascii?Q?cn2Hg3eGMHPrkOXPLKyYPmNn5bjLaF5BkSWRE0bzAWFYA5PNxDms+2+JYxkH?= =?us-ascii?Q?j9ixVEQ61hoI5lXZKgGIUqV3KYexew3Z0/kdkF7sg3Vq5zuiSFoUOpF/xu59?= =?us-ascii?Q?/rzMbiLY/0s/fGuS9a8EHnQ3Um2erTdMhyIp5MOBsIiJ5Xtj3T1I1lI7blJJ?= =?us-ascii?Q?PLoAs2rj2nC3+DUYll4YGs63gk0dMv4cwKbHEC8vvmVK3Ng2D0evjUnBFslm?= =?us-ascii?Q?hvd04hHxfKUtQCj9yLqwwtuZixwPDF3SJ5iXBIlVWmbFdztKa4OMZlk4ecw4?= =?us-ascii?Q?QCl9da0dUU9VKmL5C56rJ0VpELcO+m319eIPF0YR9zHkxXub2MPVg5LXGKd6?= =?us-ascii?Q?SMomoFC2TENPcQhaIV/qhO0D1GP1dr/pM8raggWJnjF6m3gbDeoYxW+lAcpD?= =?us-ascii?Q?X7hx+9FvnXUmiF8bxpuFZps/GMvhWyae41I69HvPx32WYHleVgb6u0EZW2aM?= =?us-ascii?Q?EiUVD8I5nXiCRavWstDxIQeZz35RX0bMNCbNaCZostePG7pNCg1rEMAFbsPn?= =?us-ascii?Q?RuEGTYDEE/XxtFxl+G+86oBUsgdgSZOHRWlfpl1H5O5XCVF0RYILlg+KlOf7?= =?us-ascii?Q?CaoH0TgqTDZQMfeGQWhP29ThyUUoDsZl1aVUA5pQNtTDtJrh/K8kdFNOno66?= =?us-ascii?Q?fj3yJn3iULCTbYvejU6SwObjSgLG8QQa0GU1ApE5AIA3y4W2T/C0BEatUb4a?= =?us-ascii?Q?q2TXPxYxRzpJ9CMZeVduypGZAvE5IzJNlsB9x248bb0wWyOkEea6UqCNb7EH?= =?us-ascii?Q?KyyUpOFCffiTuzEoLFjBSV+8fh60FuPA5CLb26DdR+TQiXGpRYHvs0PCLEUw?= =?us-ascii?Q?3d/u8L45HOYxNWSwRvczBQE4vnmMQE2hbnglRdSX01vqmujpshai6aSFv3OO?= =?us-ascii?Q?yOXHBdhGXJoiRWVfk+oM=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2315;6:9OGXElLNLNc1Z7E1YqWUemjy57FepIn4TYyALCOau+fvKeEpYzPzRzZPcCP4ckSDUWTEt9Idn7S9fUqpbDPa5iK4YmvhpNV0ZwDrWCXMwpCOE3263mdmQbJVwK0cbSfivtMArUaYk0fwnwQgTG+1cKBg2UNetO7L8X5KVdoBPRBEoDb9PlzKNjIDKViM5devETq+yF5FP7qYvqlabazrVQZw2Ah/h5PjOBmK2jQ7EhVAXeNEKyxESKzeqAnltwt3D4qVlH99HQVleBvaUjy6R7T1+RfWFTHzMgWBoiJJ6nXHaf0OaZ+gnUeToB1WjjKXtNxkWUPZN0yiM0FgfTDMzayj3UkH/eK2Cv6sNW3KbJ6ZkaUygFp2b4VkM+V9lThIO7GVZia2p9YZ2CLkdxWNRA+/ojiTfDkiUE5t1+af1B7kRxHRPxHsVmco9jEve28a0MLEUJQ7A8WiP4k2RIxWbNNtRaCqnlo1ZVcvsyKoE28=;5:7rXPJ2Yk0rstcR867mBezBP2mWFEorBhy1uJZA0oTx6N/5+ga3DVRuruZhIN/K2RzSVKPkIbMw2a/V02K2bgk1KqLM5qS5ieoanBkvXqMIibGwjP6MlWlmRKs2ZHlhmfcKG2l7g+4GqWi4NTsodAK+2E/ZEExvcbZtYLiAuXMgw=;24:5rTuRW3LPWgmzFa5cOO5l4SK6Wv9lPfFv72SBKrsePHBNv7AUt1bC/2pi2cFZnqMUIWPEJV+w0jusZ3d3227F+5z9LUaDGdgqGkhIjGWNY0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB2315;7:qXGtGw0jPCZI6No2B9LyjLna21+6d5rMBThD9brpwCHhtjAHGFecmA/FomSkOp1CFV+QAkvwiI1MPo+XFyLiAaWYfi7UKZyqfE0bkiB7KTV8MmRZPaM7kEQa1RKL0IHsJfJBOc3Uj+fguH9wk97QmVt+KnxI9kIAcMUt1escbqACUJvpJ9QZwhU6gEWQZppSz18pIK7kUUBad2Ji4vCQA1WTZ3hNWy856WfaJK4KYc1XMtNrL7B+B5u2Apfl5WV0WaeFrE3KsmUBg09j2BuyDT5uHV6snuPILnBTFdKUkKgoCWSiU8q5zAu2ZWKgojzCYY3m52sS0G7zBjfcHzCb2wf1U5KnY6kTnVdXnvCx0Q7tywayC/rn9z00yz183I4Z/4mZhliEKZtwKMnswPcSgXvA4SjOvMYHOvx81RCbTFfdRTcGhsLFDbEH+3J03NJ5EPi9WnLa8X4GL2fow5MaZA== X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Dec 2016 11:59:25.2334 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0201MB2315 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The SSC is currently not usable with the ASoC simple-audio-card, as every SSC audio user has to build a platform driver that may do as little as calling atmel_ssc_set_audio/atmel_ssc_put_audio (which allocates the SSC and registers a DAI with the ASoC subsystem). So, have that happen automatically, if the #sound-dai-cells property is present in devicetree, which it has to be anyway for simple audio card to work. Signed-off-by: Peter Rosin --- .../devicetree/bindings/misc/atmel-ssc.txt | 2 + drivers/misc/atmel-ssc.c | 50 ++++++++++++++++++++++ include/linux/atmel-ssc.h | 1 + 3 files changed, 53 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/atmel-ssc.txt b/Documentation/devicetree/bindings/misc/atmel-ssc.txt index efc98ea1f23d..f8629bb73945 100644 --- a/Documentation/devicetree/bindings/misc/atmel-ssc.txt +++ b/Documentation/devicetree/bindings/misc/atmel-ssc.txt @@ -24,6 +24,8 @@ Optional properties: this parameter to choose where the clock from. - By default the clock is from TK pin, if the clock from RK pin, this property is needed. + - #sound-dai-cells: Should contain <0>. + - This property makes the SSC into an automatically registered DAI. Examples: - PDC transfer: diff --git a/drivers/misc/atmel-ssc.c b/drivers/misc/atmel-ssc.c index 0516ecda54d3..b2a0340f277e 100644 --- a/drivers/misc/atmel-ssc.c +++ b/drivers/misc/atmel-ssc.c @@ -20,6 +20,8 @@ #include +#include "../../sound/soc/atmel/atmel_ssc_dai.h" + /* Serialize access to ssc_list and user count */ static DEFINE_SPINLOCK(user_lock); static LIST_HEAD(ssc_list); @@ -145,6 +147,49 @@ static inline const struct atmel_ssc_platform_data * __init platform_get_device_id(pdev)->driver_data; } +#ifdef CONFIG_SND_ATMEL_SOC_SSC +static int ssc_sound_dai_probe(struct ssc_device *ssc) +{ + struct device_node *np = ssc->pdev->dev.of_node; + int ret; + int id; + + ssc->sound_dai = false; + + if (!of_property_read_bool(np, "#sound-dai-cells")) + return 0; + + id = of_alias_get_id(np, "ssc"); + if (id < 0) + return id; + + ret = atmel_ssc_set_audio(id); + ssc->sound_dai = !ret; + + return ret; +} + +static void ssc_sound_dai_remove(struct ssc_device *ssc) +{ + if (!ssc->sound_dai) + return; + + atmel_ssc_put_audio(of_alias_get_id(ssc->pdev->dev.of_node, "ssc")); +} +#else +static inline int ssc_sound_dai_probe(struct ssc_device *ssc) +{ + if (of_property_read_bool(ssc->pdev->dev.of_node, "#sound-dai-cells")) + return -ENOTSUPP; + + return 0; +} + +static inline void ssc_sound_dai_remove(struct ssc_device *ssc) +{ +} +#endif + static int ssc_probe(struct platform_device *pdev) { struct resource *regs; @@ -204,6 +249,9 @@ static int ssc_probe(struct platform_device *pdev) dev_info(&pdev->dev, "Atmel SSC device at 0x%p (irq %d)\n", ssc->regs, ssc->irq); + if (ssc_sound_dai_probe(ssc)) + dev_err(&pdev->dev, "failed to auto-setup ssc for audio\n"); + return 0; } @@ -211,6 +259,8 @@ static int ssc_remove(struct platform_device *pdev) { struct ssc_device *ssc = platform_get_drvdata(pdev); + ssc_sound_dai_remove(ssc); + spin_lock(&user_lock); list_del(&ssc->list); spin_unlock(&user_lock); diff --git a/include/linux/atmel-ssc.h b/include/linux/atmel-ssc.h index 7c0f6549898b..fdb545101ede 100644 --- a/include/linux/atmel-ssc.h +++ b/include/linux/atmel-ssc.h @@ -20,6 +20,7 @@ struct ssc_device { int user; int irq; bool clk_from_rk_pin; + bool sound_dai; }; struct ssc_device * __must_check ssc_request(unsigned int ssc_num); -- 2.1.4