From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752014AbcLGF0d (ORCPT ); Wed, 7 Dec 2016 00:26:33 -0500 Received: from mail-he1eur01on0118.outbound.protection.outlook.com ([104.47.0.118]:42336 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750940AbcLGF0b (ORCPT ); Wed, 7 Dec 2016 00:26:31 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; From: Peter Rosin To: linux-kernel@vger.kernel.org Cc: Peter Rosin , Rob Herring , Mark Rutland , Liam Girdwood , Mark Brown , Nicolas Ferre , Arnd Bergmann , Greg Kroah-Hartman , Jaroslav Kysela , Takashi Iwai , devicetree@vger.kernel.org, alsa-devel@alsa-project.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 1/2] misc: atmel-ssc: register as sound DAI if #sound-dai-cells is present Date: Tue, 6 Dec 2016 20:22:36 +0100 Message-Id: <1481052157-23400-2-git-send-email-peda@axentia.se> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1481052157-23400-1-git-send-email-peda@axentia.se> References: <1481052157-23400-1-git-send-email-peda@axentia.se> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: AM5PR0402CA0010.eurprd04.prod.outlook.com (10.175.37.20) To DB6PR0201MB2309.eurprd02.prod.outlook.com (10.169.222.148) X-MS-Office365-Filtering-Correlation-Id: 2afd0f88-7adc-4fd1-d283-08d41e0d4bd3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB6PR0201MB2309; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2309;3:q8/NFOa4+riG5z/3+312sEEMEwYCGdwR5YApdGA4SdQf4R6j4vbcLypjzgEkSVYYzMF06nTibIeDvw+ZmlwnD56zHR78y9itMJ5lTsOqgRleDWDVSQ0s71eg+ezJRFNvkEHOHmgHmDM/42YvmImVd7juQEkbLofDXazcI4KE4T8awB/JD+qCcFTEw5GFMvPJnAqYBpjuY4vg3VY/+ovhytD2WvRLc95RhO/xv0G1dDm4mAFNrErB1rQ9JVIT20rLlxyUCE4L3kyU0TpIqBhWvw== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2309;25:ikW7HTtwxjSOFFbPYFX3gOxk5Seybo/kwHAngZUc7rBpHucTsFRIHnLZvaK2FaETYU2bzJRWH+DFmH8NWW2IyrMvuseeS6k6SgHJ5+gDb5Zjfr47rp/3h06cGp6SGqbQH8zhYBdZc2GCtMakMRQlh97tIpFk+js7OGDibuKuRZOpusb1VyQRGNULfOKta8mHDQGUbh2c5Z/Wbv+ZpELU9d9A4SMdVvVIlDk4y0/NdKRu2Z+i6GZlvoHe6CnOLpNYMYnaE4/VBp8j1++VNzIlqAk0fcags0lX6uucnmpzJi4d6LJ2RWTj13J6rnHBLeRv1D50esGNJEy6LLLb5XbAksrYqQzhWqwHZI9nf488Ocx5uhr7QnsqSKYQIOgHEE6kERLxoD/ERKHHBVhMKUz5wJJfinEGFEZzTAHzHgdt+QFplrf7Dr+YRCLakuHNu48X+lbi3pc2zEnCh1b7MZ1c6V7MUsV//9yONqhy8yXARSHdp+cO9iIA9o3oNZ2WwO+UFr3mJeGojRTJMPnCFcClM0oDAvuqpRFW7Ry7FnHaypZuyUkAuE2LOtDVAjI8CyjXOGTznQ65ww1p3vCLoJ5rRFA8ctSTke62KPqPGcsNS58I2UDRL2OF/x9a3UXHu+xJKPG3NeoBGrQGzlz6IkAHj6Uyvy2FwLecy55ZluOytOlUclhblOafYjSgeLq1vfKRVs7hrzVKE1Hq0N/IW65NoPEj9rHjkusmTa9SxtI0BnefN45stZpaWtQaDgxvv62k6pHU6ksB5OkNG6q4COGvnbJnu8UQwXjxePWdeJJIE9g= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2309;31:2vSbfpYAmbN4CBtdOvk7aumSE0JLzEVRGTD3ueNhu/uxYH0JOd9wglx5FlJtOwdLdCFMP56G2oM14h1Ufm+LLqKW7HE+BQxZV8hsmimXFACNLm8r8XAkdrY8TwfgSneHBAcTrlJupE6tshr5f6xNqYdBjBTgdBUiIarxpWTzGE2D0n14mGITNqMvcXehFm/5QYJNOoQ4SPnD95I+qiCDKig5HRcKrE5yTFc1/LnOs1KdS+Em2lCymvvJs83uoF1K;4:bW2bsR2NgdTaINIzYjCgycuohw3ewN+On78+kVdN4I5mKeWCNXsAcKAfZrPrtASBU3sabWlpVMw2VkIHpLDbQq4zcBppPG8A2voeemwabUymp7qosiOxRrnvc41qMH5XpWE3/HCs+fw/wPgET3KWRdm/hdmHAONHE3GMJmd5l7xi21BT6+6W4Q/JwLWAdznTOdTeaYReaA3Jp/ajai4aj4JTqJRUL2dBYy/syJ8uL+cqloywHOhcojqARVuZgxGdWfvj7cBvj8ABHUbtlhkYxL8ytFZB5BtY3hkEIy6AYb9Q20+WWPyBBrYBzdGSCDVZDiMHpTMqNDLmNEsPQxMuc3LmE6Xkg+5uxSMUI7D2Ho6X5wFraVPbFn4RLZHy6J4YNZdLNqNDBBTW7B+DTZ5QaqqEJxnzo/3aRI+w96dRyDvwpBAwOdHii+3vlhe0MvG9CKZj8vuNxI2a4PWRwjhSz0OrDqQ9mg7RpNFB34yPxmAu9pg6VrL6F5b9HQn1fZJYxIDWCrER2zm9Rf3L+Y869Vcn3dgakcb0QW/HswBShoS6QT9HbxhefOlDhQLlOrZnABE1rnxSCd+o4xm6bPlalkbHHpKP4hcfzMViJofI97s2JhcHZfTH2AMyq2IK4k8z 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)(10201501046)(3002001)(6041248)(2016111802025)(20161123555025)(20161123562025)(20161123564025)(20161123560025)(6043046)(6072148);SRVR:DB6PR0201MB2309;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0201MB2309; X-Forefront-PRVS: 01480965DA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(7916002)(199003)(189002)(2906002)(2351001)(33646002)(81156014)(47776003)(42186005)(97736004)(8676002)(110136003)(105586002)(6506006)(305945005)(6486002)(575784001)(74482002)(106356001)(230783001)(733004)(6512006)(6116002)(86362001)(39060400001)(81166006)(36756003)(39450400002)(39410400001)(50466002)(5660300001)(2950100002)(48376002)(92566002)(3846002)(6666003)(76176999)(5003940100001)(7416002)(7846002)(50986999)(6916009)(101416001)(66066001)(50226002)(38730400001)(39830400001)(189998001)(68736007)(7736002)(4326007)(2361001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0201MB2309;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0201MB2309;23:YjxWOv+A0h1wUwO7xsQL201zEY8cDLQhGbLxGl5?= =?us-ascii?Q?97BJcYe2Lr8G3n9+wc25RdDHGtTHT5UP3AeCYeCClX4MB1RkkmgQKn6az/iI?= =?us-ascii?Q?cnRxoL1PrXCDRtXDgyM8gJJoS9dQPkA+rmkxegWlgkf7wxgJ8KQ2rsuC8NFv?= =?us-ascii?Q?aJnCmDxWBQxfqMmTvAgN5Ituz47z/BlFdeIYGoLqIbiOlJVVJl9DkSCFs6gx?= =?us-ascii?Q?ej4LItsOqLQfV8y7uPb2U1G38GD1lWMDiLexj+XznjtafIa4sZmCNSK9kk+q?= =?us-ascii?Q?IY1IzX9Pr/x+N98C+EwnyQzqQSr3qei3bmwNTcboVdR0gSYPnsR2PHjsgIoJ?= =?us-ascii?Q?/i0rIuci+4RhE1bfLPxNHjqGazdoLyLBpRt7QTTcw8TTJgCecJWf5VIMyz96?= =?us-ascii?Q?eCziQ6+GByJiD0IqH3j00nKNABrT2ac7dkuW4QP2l8V2pOVTAwjCEXerz4ZT?= =?us-ascii?Q?ufQdWNYImW7IDvG8wihhB2WXCdYZ8KnCO0cRJjfpHz89+S7V9A6cX8iCJEiA?= =?us-ascii?Q?4gaNGI9PVlJ56J5XO3+Wq8R8UXEN++LEsyLFejeW+Zxz+JILCC+FGpGv56GM?= =?us-ascii?Q?9/6qJDceNKHCQiAA5LAAqz/bR4bkSfkvtr3qGQ9yQ+UP+s6aGBIUQFgHx9ZS?= =?us-ascii?Q?A6ItRRwBuWtmpTpKrdbWOKIQ0zYocOmeEKCk/iAv3ywqAF0Vz8ES95MDRWtb?= =?us-ascii?Q?IcWYxQ1SOFR0vqxGk7LBX7Y7pACTNQX301qtXZQ8gXOC8RZgCvf0apzSukU5?= =?us-ascii?Q?hPaMlyp+2qGlson2yQzFWFCcj30aehlAzoD7Z+3/u1yo3eFLPGLEpLoDffpG?= =?us-ascii?Q?T/p89BgMPA1mPP3AN6rXhQ2tLTa6pLfFNs9hNyWAH/0wHrS0q/wFb5M6Z5zF?= =?us-ascii?Q?KEKP5/LC6ApWMJzaP5QvbUv6oRUoU8KjpnGCYj59z4kXvyGydh/xnkGv4rQp?= =?us-ascii?Q?kMF/CleSRkvtQbgBDgdEe7cr75c7Z9nKkJgZgFAaxAwHQpyplpTyfly1Ytwc?= =?us-ascii?Q?AyITSA/9yeUccM3ZFAOICa3WRC/7u6V5Z4ZbKzv8lPgnA2IzM4DGfOvtI9Zm?= =?us-ascii?Q?+fvLy80LIB4b3SWzP5XzixZZwmnbc0isRFWi9chuR4hNoydoYEoXTO75MT+Q?= =?us-ascii?Q?knPLqPNPQ27zqPTSPb/yJaOdLTdGmXHf9sg0KkRUicXNUjlOssfZuDNWQjaX?= =?us-ascii?Q?XQBH3Df4xaYP2S02rbaJ+uH58duYdAzFKofftpgYDdpfRweqviAbeiGSNq79?= =?us-ascii?Q?DKYQlcnGx2QHQykPLsFHF7dz2H3hDvtUza0H/hREfWQGdbctkkDY4kuCRowo?= =?us-ascii?Q?UaaAYqtwjNk1rqfkctVWKC8XGs52xOs6QumPJj/6KGnTW?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2309;6:4tdgytsFYBA+U2niOUjgDngjuINjeUlIaE4P15d2y4k95SW1E8YDQoK7SzajfOBfq7E7Mye3T6SjV+I8HxHXO/oSJvKQLX4nubLvQ5G0bOlcOd2wNmt31bUXRNycR/0/DjHl1s8U63MOVLWIMsL0/1HXwTMGN2qSAgJXasqr8Gg9oeXKFgpw20+ZJ7SizeFaZk4htOgNEwzkVZyaKbAUJ/o1r0qjIeBnPmigKNBG4sG9KRLFXxW0RyxvSsExQ2XmUlJrUFLLt5PbXoLl2WcAucV8PVGZEWP68xwg6RzpuL0CU4KikRTbR2PvQlqo9QaaNF9tv0d1aYrHMB3gbKlHjFq2HBTFQe9h9+ufmjGbwdnzX50NsxAC62NGsJOWARCHlAhiT4u9ciI+FRDmYxulLf3L8V3ca8SBFIeVjx2HsS/eKW3aMvz/5SwlJm/m443bA1DhQViWzUL7AKArWORMD3HvXlwzDxQlbEw/h6jEzFY=;5:ic5z76j/USD3FvxAXAj0xWBKRs2qqfUwpJoT64EmAvLNhhMppKEJAjnTnxzavJbE9lOZzo7VQyOz2EAcYkJpf2jnyeWe/qzHdFZcrMJjwO9eHlg6/3Yn1pgA2X5GRfP2FUSs1oKGl24fQi+ZsSMvzg==;24:L/dAi0sQHof/yGZBhNlF1ikcHL5b7ZzpWhG1FEu5ohK6kvK78IkX4aSAJFGMBM3SblRbO1rPghgINYIY/49SI5yLqWyYvTM9ffohGHFq8jw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2309;7:2VLuwtK4RLbZak4SmPRgKKDURlc8/YSQoY/U1ER4k2ItMOOrdJRi+uvqXIwFrrelh/DhI3NoyaT5921Cw8HaogSw6LYkl4DAt4iQ9jbfgW5vOYPnQzsiCBsx0/J79wB7Zl/UJibsX2hzGIsr4DrYDns8+B+58j9wKKXQI5PPcCcPBY+M2jElT74fvs5PcShg2is8BmB0PIo3LRbiKBmtWIi55jxJexYWfKTrBeM6z106QCrG3uzhLWuOyGhuqlLBA2KGAlGcCznznRwHA+EqRzMGRAuRNJGSS1a0ZKyFEGnSRtdc6MsGUzCgCltIM54ddAlHMp1/5OQIrgwU5qV8iWSrpLgYG3ZmaLvEFNXHziRoyW0cGDY37g95crzgaLQEk9ekQYhz3ute2lSQIEz9r2wRKmVUnSXtYCzz38Q1XnYxUOQNyDKvzZMH32+IJD3s4SNQ4ZdzCqOgI3en/n1rPg==;23:xZht0a/47CUufSdmz2AQK+Dhh/vY7K6C/auD1SL/YsUPWiYse+DGN47WqDhAaCMFcGwFeP9q9Qm7r0XvsfcWxkekVnjNgHFdNf7kkaaPyguXtyf+meUf6DkzBSOmmTKeZoBnskIFJ3cCoMx3vjZE4A== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2016 19:23:00.6851 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0201MB2309 X-OriginatorOrg: axentia.se 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. Acked-by: Rob Herring 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