From patchwork Thu Jul 27 14:55:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mihai Serban X-Patchwork-Id: 9867081 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 1BA286038C for ; Thu, 27 Jul 2017 14:55:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0BFC81FFF8 for ; Thu, 27 Jul 2017 14:55:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 008E5286B6; Thu, 27 Jul 2017 14:55:28 +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.9 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham 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 D8F351FFF8 for ; Thu, 27 Jul 2017 14:55:27 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 3887C2675C0; Thu, 27 Jul 2017 16:55:25 +0200 (CEST) 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 231D52675C3; Thu, 27 Jul 2017 16:55:24 +0200 (CEST) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0078.outbound.protection.outlook.com [104.47.37.78]) by alsa0.perex.cz (Postfix) with ESMTP id 16201266A8A for ; Thu, 27 Jul 2017 16:55:18 +0200 (CEST) Received: from MWHPR03CA0037.namprd03.prod.outlook.com (10.174.173.154) by BN3PR0301MB0900.namprd03.prod.outlook.com (10.160.156.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10; Thu, 27 Jul 2017 14:55:16 +0000 Received: from BL2FFO11FD048.protection.gbl (2a01:111:f400:7c09::198) by MWHPR03CA0037.outlook.office365.com (2603:10b6:301:3b::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10 via Frontend Transport; Thu, 27 Jul 2017 14:55:15 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD048.mail.protection.outlook.com (10.173.161.210) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1240.9 via Frontend Transport; Thu, 27 Jul 2017 14:55:14 +0000 Received: from fsr-ub1664-117.ea.freescale.net (fsr-ub1664-117.ea.freescale.net [10.171.74.140]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v6REtBC2020670; Thu, 27 Jul 2017 07:55:12 -0700 From: Mihai Serban To: Date: Thu, 27 Jul 2017 17:55:10 +0300 Message-ID: <1501167310-24905-1-git-send-email-mihai.serban@nxp.com> X-Mailer: git-send-email 2.7.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131456409153871776; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39850400002)(39400400002)(39380400002)(39860400002)(39410400002)(39450400003)(39840400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(356003)(4326008)(2351001)(33646002)(305945005)(81156014)(189998001)(97736004)(5003940100001)(81166006)(498600001)(105606002)(8676002)(50466002)(8936002)(50226002)(48376002)(50986999)(106466001)(104016004)(6916009)(38730400002)(53936002)(6306002)(966005)(8656003)(54906002)(36756003)(626005)(2906002)(110136004)(47776003)(86362001)(68736007)(5660300001)(85426001)(77096006)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0301MB0900; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BL2FFO11FD048; 1:+H3M98fTgOeC/eYXQKxDKE8pQvAWCFxudylnUi1w76?= =?us-ascii?Q?jCxeHOpyLrKT3wcQ5P5sXLFHcJyySjUkqBoyViimoZLa0YghCpUD9AzL4b5d?= =?us-ascii?Q?AQyfoSXA28DHwJ3oiBv1YgFa+N1guokIwHFpS1vjROZvJ9iMLQg4NDcT0axS?= =?us-ascii?Q?NadexRS6fb70ZPYdTz48XKEdFcyQdR/wZDEaE4YzujaxLrFDtsuLwKVdDTGW?= =?us-ascii?Q?zT81T+lGnSZX0U34uHW/TCBdTGs0O5BWoTtV+ngZQA5cXBM1eenE0trMu+iB?= =?us-ascii?Q?GwZfLypwcl4dbDwHWRhn0dvwNu5nqu7kTQenEO88TFpYlZIq3p5/NInvuOdG?= =?us-ascii?Q?57u7M51fMyOFVqEm3sa1bl1geZCOIdedgtCsx2BuC4zeGVHWjeOsGt0d2NCK?= =?us-ascii?Q?146EL+dbdP427zyiO1GF0NC4AntMgp2J1P1kAxcLr+D+H+QCH20owV754CaH?= =?us-ascii?Q?QfU4hxtjBQ1UtR4oYO996yjqGTbvvvm6ydoTq0B16Fo9i5bYcmS+pQ0fFJU4?= =?us-ascii?Q?MGXvDd0BwRih7LLp5lp65kLywzdjfKC2t3ZpNSzQwfYoSSuLsFp6OCcor4Zv?= =?us-ascii?Q?0WLJuMPGa8uBl9hrF5Adln2reQPEFC/8HzKFcGtRe+zdmM7Y51kAlDDuAm/g?= =?us-ascii?Q?jRWdrtsQTO56JaoVFzSCHqu/tRjDwfwcqPyz3uMukWcSP/Cy8USsBj2bgTmK?= =?us-ascii?Q?QnY/9kvMfh1oCk526i8Vriop7phCxUhW03WW76Mq22hdB8ItEXMvRcH/X8UT?= =?us-ascii?Q?C9UE7a2BQ+qjoJxkIsBXBSAY0Yh2R5rAXZwN7B9i9De0Mo1DEGalScJfv6C7?= =?us-ascii?Q?p5Xv5gpBpyg5FGnCR0TmF7Luid5uOvHvuEkiu5O+EGhAXx1dkiUSVXwTtMU1?= =?us-ascii?Q?onPhcr3MwyBMyppIyV5sBIcrsBu5phqxdTZW/KfAgBhVY5QGooGgIlcU+swe?= =?us-ascii?Q?O+7uRYZG4l2Ylok3iDokf/+2ftftXjiIeWY2SxOOz8wbixcvs/67FrWAAvY7?= =?us-ascii?Q?141uzK38PRgTU91LN5h5gppT233oiC9/GKydT/BBBOXA=3D=3D?= MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f05e6694-6ee5-40a4-94b8-08d4d4ff7d74 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(2017052603031)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:BN3PR0301MB0900; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0900; 3:TR/BZ6buHMlt1+zgrtmj0DjFDPbKSdI5VPUMvsc/kcbYEVY0TxCiPN9t+OTMgVVGzkuBelJ5RxLQkv9xmhtiJGB18fJNNEtagZN0XueavmZXQzI08+aFYCmTWBSrRLfWk4HbL4Jo4M3cNeVv5vTTthRFLHrfMjTuQf9sWFc0uIHTJhid3Mes89H2x4OQXQtll0nkbMzXbctaT9v/FkJusy56fgBrMn2SOMW76phBma02QOVBA2cBNE/IvgDlnjUGFuTf/vjipC6RaURfizJDbDiUlEJmDScRdgPnxExBtj5XK7XTobZUuejnyOIPnOZbAg5M6W+lkOBKxbP3xNdlNYMeGXx/PN5f+1t1hntO9zn1PQM10uRv0N++nG3u8F47z6cYFr37J7z8plO4ZivpjAe5KkTztT4E8E2dM8N9QUVK83ctPx9NNDCb6hSSsrZFmicZyRbQYmfyEYgdh1uajIbKhIY3v0B90wKYaeHSUEARqmjf2D4b3RMd2J/Zvmltd0xkWLeo4fDkjUBWyQg/njT+zJr9ClU2E7in8etp2Hc18p2ECDyNnCI8SFQa+KvpdbVFwZqxtKaksow0TwsFds0ZKYsWekNBYeieqxZvB8D8oph3yLxXucpwxtQHxAW0SLBFiR9LvqjeSw3VH8F2qAVFhZRGXCuGUezVWvU7zeDNFQS2DKDUibHXMiTeSUdO1iXjlcMZg96vOKxyovqMLiGkAqHd/XgYY7aUW2uzLhJcLjy9uF0UjkaYs/tOQx6kpASUxcHgUrRKKjUNawSzj4MmSg8PTrN+3cYzbeXqnVl8ZyJ5pz3fANkBNqi9jpBzprX76OtlXGA0HupZkaPtzXPS7wWck/UNFCovD8ERgoZXRM06WrDCKiu75LJPVW2J X-MS-TrafficTypeDiagnostic: BN3PR0301MB0900: X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0900; 25:VWub/ZxMK3hD5qjgfgYYvbSuaZOBL/JbDqv06BSoYQgcEBULvagftJduq2i8/9UK8QWRf34ekFr898KLNKQkfoiS1tk6nrcgg29mZE8ACC2+Jr40S1OsqDYGMRRQPRsKCVnt/y2u421L6bdyto3MWGzZzLKwXzk8XEcvCHNGWWB7DUex19BmALB/It656bxOto7CdDs+fct8SvP0TtAZAt7uNVSWdij2IE7YmFCQfsOmFRQ3GDl4fiVENpksqS8LOXUI99FH8rsMIL5yKE8oPD0N1wkjs32R7oYK+jlaB8gPgqQ12dfGr6FP6bzF5Xgc3iINEUj6hU2l0n5LmMfMu7G8VIyszjmKFfSIi6g5xrtX+oCGH6O8oL2i38myLuQc2rGrXK0s14dSfc33DSUSNC5fFNOSf+HEDkaD8x+P2vgX5t3Bu+GC95Od81bsO6OahcoO4y6LUWiK7hFb8YypCQeDk9Q4PY0UMIeoxfjNRqb9A4C7xHIrQD3ykvoyOh/qTWNUHK6q7hN4Qrvj+5qYYV+wByGmnb0xSavwdzLamvb0sEIEzVVvVsgy3htH6P3WdGJHcmHdOeJ2QpfQZVxXDPD6OSBDeujG6sUJqkbQ4xCG6Z2GG7cU5OB9Q51MQBjd5w20aoJ0GE4/suK0KPzwJ4DrXEXm/1pnPcD+7AxpYA5sf0UZxfybzLjv/PeQtic0AIHqZhhEJEhvMTaaHybIxjtJZUv2BcyWhN5yWo52UOzMsv39/h/Vxk6dOxaiOljE7qeFb7q8yNGb5aMxcuz/dkX/l8qWhkWp2qcgX+bUJyfvAcMdzLJwMkJZLYwEXSGAhQarIVcopnoW9o/IwZQjEvf18IrFLsS8jNO9GgqpileoWAENj6orYp4LNDLg819Znk+SOSEw8KthGiGTlm3+WVKdcLWJSgScPqN8GCuFqHM= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0900; 31:ae0IVVdzTXKFmJvu9YrwhU2CVo+JtMYaM2CmOj1PV/KlV7rTHD5C+oEeBY2a0kdmBvHs2TvFbVJFhqSH3fnqigo8YJtSw/E3T8JwnOPr3hVYK7Ki62b4LNaerYVD08+5B7IK+tDsXUXhFze5P/XujhL50F88iuoDbwapdqRYEWbByXZIjtE8rslDZEWrtIEqDeh9cX4sgrUQ930NZq2U1NdUY/Xza7559yVnCRJ+uI6+BAaSE0fQKxO0Yeh3/euk0Eya27lsSCKVY/QEwAB0G5nRTL9DcJkCemoy5JvHJHQPmhLnksTJfTgvC4LWv7lhWfDhDWVTkKF2XU60hMMsYUHZhMI9Vk00jQ8nL4PVF6cMaC2in4+hqRGLQIzF7tBmvoq1i+zG0zx5idOsbKtoRlXMUcR/d3qy5VOIgiNC6KCYVjCeAlODWJzE7kaf/8NRIMwuHnemb4CaLn/BaqFRN0syHtsnh6tgYxhiXhXjMRKkxqLK+8Dz6jWeRZi8NNxqRjqJ0H+OEn14e1fP+UuQ3NnCCeWXTJv7B9eg3jdSrWF1k7F6HkWtVZ2Ojqjgg886SwZ00507bBkWA7tbDpIeQfV3Vr0nA/NADsBbQy58SPSAxKIHEulvxOMW/AcVxpvAcrlCmf7/dstTZqAgLrKFItTdJdCTDfP0sN3NrZdSNlEUFAqJcQ/jqWvbGsHAUPtsyiEdBYJokVZWncrCrwwbDw== X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(8121501046)(13016025)(5005006)(13018025)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3002001)(6055026)(6096035)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123556025)(20161123561025)(20161123565025)(20161123563025)(20161123559100)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BN3PR0301MB0900; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BN3PR0301MB0900; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB0900; 4:2Y7kstWPm8RCnQ5gbG+Ipl43peZ6Hk59hn896XWT?= =?us-ascii?Q?Y19DoMHlXsZBCpPVmSvaQ55d1lLyfA5Y61n1yui9J9gVXgqzJPvvS3tY8F8o?= =?us-ascii?Q?RgY4V7DXutuTtci9O9yr5v+vn5u+hFTPq8kJ11FCuKFnZUP62OyP0ScPpgjg?= =?us-ascii?Q?UsBCGMkdl0v+J9QpVQifwgJly6UTVgQNgVZ2UojdUj1Ed9wYgKIevzN2PxHp?= =?us-ascii?Q?v/NoAZxys0AN+hMT4vQsvDuFA0X3oyBsstAndHLpJW+PWAUGsWLoQ0P8Ubxp?= =?us-ascii?Q?6Bc+Ya+/7m76ETb1ODXNs63D0itFmXXn9jOUwPyafKR35G2mAYt/793QZQMv?= =?us-ascii?Q?C05T2S5EQctT1BWzsPKO3LESGSOG3axeTgnLaJawLLhil/hM0DTEhb9FBd7s?= =?us-ascii?Q?Gt0Chkwv/vr+RRPUVw+OWE6BTutaUXroaYZ0CdxWVIdSQFPwcH4x1Zz6fM+4?= =?us-ascii?Q?5JR64TLkWl5sNs5tfRwbpfxujS+AgTt++HTLeWMba/cMN1CBDlL5su3wUt8S?= =?us-ascii?Q?hVHUpMNPY59tSqAWdSV8ZvyrrfYXMrkjoTZu2lJ085wjFpKG7JHEdumd6YER?= =?us-ascii?Q?ZufH7HwLFzii4InovtSyhAA7LKDpawsxwjBttWlnPbs/j1oWiikj3xRSgM63?= =?us-ascii?Q?oP14jKCZy0JEJfuBzrWACqRcqVOUo9jgS1vTp5RQColZYzG1pNJulPFSgGMr?= =?us-ascii?Q?wXDytHKR3qBNHVmWXlFxsOW9NhzNu7pV54O0QJ1fXOtNJDrju7idig36QVSd?= =?us-ascii?Q?NYvXvVo69TIhjNR7/Sm2Q5lqlMSXJLSZq7+goZDu1j7e7qdCXmIoxwUJDHad?= =?us-ascii?Q?afBmAB0hYvZi0VDteWRzf/UuOiz+TNGo5hW3eIb/zgxgpZU9jYRrl8nYOfvu?= =?us-ascii?Q?lwbGFy4R6/b+W/MdlY/94Eatli4thxS94mcDpOrebcJiCjyowUSig29zVdtF?= =?us-ascii?Q?cLnDdmMrYpIKszCEnMQq5m4gJ9MlE735RUy+IDnnqQkQ2WQgmeFGUJJ6wrcR?= =?us-ascii?Q?CCAikB3/Neo4r1g40fSUbRxfAXp1Z0kZxmQNIHjqVWpXuesuHCFX3D1ySKnb?= =?us-ascii?Q?OIMV35N09lt/anRmJejPo6X5uYrDiPM3K/mLOyvtIJwVxGoiGbQ3Baby6svE?= =?us-ascii?Q?lF37juuD2mQs5V1T+SHjTJ3YDm+QH8s+CPXQ3vESWuG73+VMQEYiMTKm2BiS?= =?us-ascii?Q?6VNbiuyewpiNs9CHMd1CoeQDA9vIxcXWBTDV+lbCv6P3VfdzyxUtn+80HyPm?= =?us-ascii?Q?Mn/4c2f45u9rvenUh3sRvT/xQ+tyQ1oWkaoP/Zp7?= X-Forefront-PRVS: 03818C953D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB0900; 23:sYObRMV/7A29s4Cdzx4aUYgJVmYEVobxzC1AZqz?= =?us-ascii?Q?48IelsqYVHoWTOTJJXyuHjODDkX2QGV3t+Dt/qBaAVihG3FXI6JW3nUoOSMz?= =?us-ascii?Q?mvM0/+NjcUd29tKjha8RDxmRKBna30ie7gRjVNzNqA3mOjTfXaOVpzeUdSk3?= =?us-ascii?Q?fbX2VvJFpeLJTeXBZrxviVYWAajPqcw6VjAMM+sNGLYmFmm9a/O3nR9ZWvQH?= =?us-ascii?Q?WeTD2vH6FoTYeYWx8I3BZR5fXzL9sJ2pdDYwRifTexzGHDhhM61GMqQqrsWJ?= =?us-ascii?Q?fUOkehPoGPcx+AtwNYhbSqgGJwr8rhmqGIhY8qLU1uuiIbXJUDT7+M9YW38N?= =?us-ascii?Q?II5TMyMPmwLFZKrNwPqMUaonC8nHDNi0MgABmOrg8JB4P2YSd2e/Jezs9+dp?= =?us-ascii?Q?kWwh+Mwt+1+6+Bi7FS7DeMBDmxl7FUVA3OttQbVO0U0JGeShpnwOMHRj7k9u?= =?us-ascii?Q?1zPEyFPnnC++DV98XJoOnujl4QKEX9PMkRutPdmKwUeRizm+nSJlgByP6Q4w?= =?us-ascii?Q?1I+WpTYSDBw7/DqOGZdS8fErdFKD8ektQTT1V/dOYCogEmiog453ZoCPh7RK?= =?us-ascii?Q?oWZfgmaO/NH1cdw9+1v1Jqfs6e0wclQeiIF9S85h8HpGVJyymy2TnpHe5xJ0?= =?us-ascii?Q?X/Dau8F8ptQ3LPqd2ecU3sJrGOay0eOogWbfqUiLchljSF4vu1SEsWgj5Dm1?= =?us-ascii?Q?Qa61cg1ZsETYut1UE+wO4/GbpTl8eAXtozljyQvoTz30TimDGmwztEqNCqOa?= =?us-ascii?Q?wggM09DREdmnzerMfZhKbMtlG4yYpx7O2qg3eiu56kaubShWxaWemTD4CCDy?= =?us-ascii?Q?D2l+3uIC0TWpFGAbS/r5+Aa8zNg8nurcGhkAPYWjQGMAP8n8+XpBU9kGZ0Df?= =?us-ascii?Q?ijxXp1LIukAMdt0FtBcl4DHlmfareFuEiVb8pS2JvGeV82KxOpGqQkmijvHT?= =?us-ascii?Q?N6/huPJYsxLIhwwVKTCGD/0zyDU9BzWOOcRU+p3bDt8ENO9N1r27xPFy+8B3?= =?us-ascii?Q?gc3sGiBrhAPfkH+8BV+pqxSP4WdPGKODP0vfwYJ/gEhH+bhc1CVDI57JeODr?= =?us-ascii?Q?4fmLjtN0BMCg2MeZMsraM7JzXDx4rpzIgPbkPuC0t+KFx1idYJtd8suKAzz/?= =?us-ascii?Q?fQ9nTkitIQywJr2J8cQQ+oYA2xsZKeLC6edkHTBRP0T8gKztMADUxoJ4Usye?= =?us-ascii?Q?+hhkyAhIoC/dpQYKth0shBEiXIIsWZzN3/5FD3nlf2U69gRQ1ikrx5qf5Oze?= =?us-ascii?Q?YTVpP5OK1Ci6+xiyVh3hMeM34wNCg/p8bXaAH6ptsq0HucayUT6DJx2PeLGa?= =?us-ascii?Q?Gig=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0301MB0900; 6:Sw4SlzvThDahLAiEL5h0y1ddjZL7bI7nI9MatNCH?= =?us-ascii?Q?P3IF77FyqlM3HRD42RS2SLdNaaxQIqOp3+I6YhZ1btqDUXgPaKarwkO+Swi0?= =?us-ascii?Q?98pqF+JLQ6mJZ+ICkGMpGwPwrjq9YilHiTRQpt0KKZUt1zWudDjOG89lnT8O?= =?us-ascii?Q?6UXMUpb3kg9GOOv4CjPItXpYfnzq3spidVZcrtcIko1BLorGDd5bdA0P7nlO?= =?us-ascii?Q?G3eN9wzBTc3Te5jYrRX/ws9FloYENUcjorg1ba1aKj5fW+5ZVpspt5ebpND3?= =?us-ascii?Q?fn/PIc2DeeSFkOhS0pRtmiDgN97JHR46K3VMAROZ5pIEG+oxsfoY2ijYgOi7?= =?us-ascii?Q?DLhQBFYRciK2HukZAXSHPkwrfyaz9JrcZ3ko87S95L9tyu1KvrSjrhCu1GgR?= =?us-ascii?Q?W2jcohSv8Omb/KCCLv2tt+2l/bmI/jR8jYgSzsn3H++SjTvlX80JhfZ3QE2k?= =?us-ascii?Q?lv5eaCjhH7xXl8wHq7LFBafkvqL6C9L3Tvk2trQDrqF9kJh5N38w4OP7shjR?= =?us-ascii?Q?aC6rtpaeYFKW70ToZrO1/wf4hpLKzElbjo0kuwn2oOoRo/sXp+eQlRjVtQwQ?= =?us-ascii?Q?HKmCfzfxtYzEWMV4IOZMYCjtIBLm/2knI4B8UifsQC21ok9kmseXPeAFqcBW?= =?us-ascii?Q?+5QBB1uIIJMzI/eqcvJCML7lZlmS9OUGndUU1NBWWFWaXnzkeI3FnSVoje+G?= =?us-ascii?Q?uaYdgZNxJv5pSZNXplyelysJx487DSl9Aungv8X+KWUvc+Udhj+doExWu/p4?= =?us-ascii?Q?ShH+Eh7s85dqe615pp1RN7s0D1MrAyZD5KocmNqkk5Oiiv1yYJPbjYMsCHxr?= =?us-ascii?Q?jeXv8EckDg+RROXqqLXpzMLzfpy++Qe0jT6ZxvZxGqaJlHWxR98yRpyPnoz6?= =?us-ascii?Q?lHvq6vp/wYEGvE8QNnap5PfftRHSQCPx7ziFBM3pjI/ENHEn4pVnqaTVpnh+?= =?us-ascii?Q?ileVzf2ZARfl4IAsLBnI/U7Etu8knVjURORI561o/o450sNlEYNSraqqeCtw?= =?us-ascii?Q?WxE=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0900; 5:RFMxyHbwyXs6+rLDhgP7DaCzxfg+jT4bdeMHLaPPe2K+gojR0NBKa09BYXr1V1NDJqzNJJs1/uJLXyxKyFcF5GRy0vV66jprGO0rHBX7A6M+culPUKZxfhPJ6l000NOo2jPjNDodgEl4n9Gpz/A+GqFTnPwuGIFqrxNQzx3/nEgAleX77lmNHUFat6iMYrbUkJp+wlVCsweND7eJUQ5Xbi0rPtpH4v8JVYJzIJiM/nGdMgD8RZMLq3daBjhZ9bby2upOvaF4ZWoyph3MrdeD5HwEhUd8zndUmx8YNpm0es20Gb9n2w9dXD1JrghBKV9EPoFdVNzLrw5bJuQ6XyE7SETUeaA5oH+auTGG9c69SBwuO9xUFyea49FHLFtt8oxvq4xTbouLPXYNCX9qWw2HMhMw1jByYrAvBv/YHiS+1bMk3dl7K1XEMC4TxSV0x7friD+mAaaIoIGqQEY35y0IjSvxn2/RZ/S8tHT/Kxf0uEBInOLFBItpMqUPDYAiUm8X4pn6gEgu2WgrjzTVzogFEA==; 24:UsuBElHqGMoq8GMpqWv3xIrjUDyQzsqmhB+7UQ6oaWDgJafaHca7Y9zBoiUWpiSrz4FxspsbgQ26afDXG7KQt9r6hr97e2T2gwoVLKv/i+A= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN3PR0301MB0900; 7:EDeBoH8wr0+s6R9Pol+6h59j2BStERfxHz6s38HmxSzQzzTSVC6OpjVmpt6lEbr5ZZlXhIUbegDJN3khGjekykak0ytWNFW8fXH5XDZx7BfgJPZwx/Z+NhvwL1dOn1gulHIbeb5CXPT02YsGSdV4MPhquUiapu1tsICzoOKUzbIhFeJ/p0QtFd7KxUXK1x0BF7kXqd2uRHXH9tfYI2wpK9eX95OIuJ/Iaqx6Gy/QR6GjWqSzAKTXeFtjL+CyYBqXUP5q3pIO3QIYf0e7j2NiVCE3BsEBL6U6/WBQcrGlfqFTU/3fDo+DganFjiD2Fnkc6zA/KDT8ua4b/TPjI/d2Lz93OtS8g8KMgU8L+bY5V6MUVKusgp/VXqInxQ+5E+u+yaKmABpnMbkpSChM/jH4L+OR3Y2qw/XbjbEj/uyA/qXRr92HgeV0hTW+rTa7MhD7IxOQMbihXF6QUXuDl8jbv+hG9NJEj1O6LKAxO31elqdkD8xiGPoJlvKv5SAHopNUco8TN2ZZaxhXnLh9e4QH3UntkQp1Pq+MokezwvZH0zu8QyadFggHJb3TRufYm04vjRHafmq8nDuDfqGZ+k00Ovw/lciYNYWZSxAruAomVExmo3lw6hSTuMCLF1QSHWA6JzrgB5n9ktI2UGHeQX8zcozKtMiUKAlghinasaX+UV+NzNOEgaPOtKnQqLP37y+h2Rj2BY3RpyTdK7fQbVyghG3bN8LIweHjzhGmGI5ILEKPCJj34eexDWiL9CL6CLUDQct6A0GEECqy/StZqUZS3+V8Sy6Tvro7Fiq9iOoubgQ= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2017 14:55:14.0612 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0301MB0900 Cc: shengjiu.wang@nxp.com, broonie@kernel.org Subject: [alsa-devel] [PATCH] ASoC: codecs: add wm8524 codec driver 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 WM8524 is a 24-bit 192KHz stereo digital/analog converter (DAC) with integral charge pump and a simple hardware control interface. Product information can be found at: https://www.cirrus.com/products/wm8524/ Signed-off-by: Mihai Serban Signed-off-by: Shengjiu Wang --- Documentation/devicetree/bindings/sound/wm8524.txt | 16 ++ sound/soc/codecs/Kconfig | 5 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/wm8524.c | 265 +++++++++++++++++++++ 4 files changed, 288 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/wm8524.txt create mode 100644 sound/soc/codecs/wm8524.c diff --git a/Documentation/devicetree/bindings/sound/wm8524.txt b/Documentation/devicetree/bindings/sound/wm8524.txt new file mode 100644 index 0000000..20c6200 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/wm8524.txt @@ -0,0 +1,16 @@ +WM8524 audio CODEC + +This device does not use I2C or SPI but a simple Hardware Control Interface. + +Required properties: + + - compatible : "wlf,wm8524" + + - wlf,mute-gpios: a GPIO spec for the MUTE pin. + +Example: + +codec: wm8524@0 { + compatible = "wlf,wm8524"; + wlf,mute-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; +}; diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 024ddc9..010811e 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -174,6 +174,7 @@ config SND_SOC_ALL_CODECS select SND_SOC_WM8400 if MFD_WM8400 select SND_SOC_WM8510 if SND_SOC_I2C_AND_SPI select SND_SOC_WM8523 if I2C + select SND_SOC_WM8524 if GPIOLIB select SND_SOC_WM8580 if I2C select SND_SOC_WM8711 if SND_SOC_I2C_AND_SPI select SND_SOC_WM8727 @@ -974,6 +975,10 @@ config SND_SOC_WM8523 tristate "Wolfson Microelectronics WM8523 DAC" depends on I2C +config SND_SOC_WM8524 + tristate "Wolfson Microelectronics WM8524 DAC" + depends on GPIOLIB + config SND_SOC_WM8580 tristate "Wolfson Microelectronics WM8580 and WM8581 CODECs" depends on I2C diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index a8a4b07..12dc2f7 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -183,6 +183,7 @@ snd-soc-wm8350-objs := wm8350.o snd-soc-wm8400-objs := wm8400.o snd-soc-wm8510-objs := wm8510.o snd-soc-wm8523-objs := wm8523.o +snd-soc-wm8524-objs := wm8524.o snd-soc-wm8580-objs := wm8580.o snd-soc-wm8711-objs := wm8711.o snd-soc-wm8727-objs := wm8727.o @@ -416,6 +417,7 @@ obj-$(CONFIG_SND_SOC_WM8350) += snd-soc-wm8350.o obj-$(CONFIG_SND_SOC_WM8400) += snd-soc-wm8400.o obj-$(CONFIG_SND_SOC_WM8510) += snd-soc-wm8510.o obj-$(CONFIG_SND_SOC_WM8523) += snd-soc-wm8523.o +obj-$(CONFIG_SND_SOC_WM8524) += snd-soc-wm8524.o obj-$(CONFIG_SND_SOC_WM8580) += snd-soc-wm8580.o obj-$(CONFIG_SND_SOC_WM8711) += snd-soc-wm8711.o obj-$(CONFIG_SND_SOC_WM8727) += snd-soc-wm8727.o diff --git a/sound/soc/codecs/wm8524.c b/sound/soc/codecs/wm8524.c new file mode 100644 index 0000000..f42ec66 --- /dev/null +++ b/sound/soc/codecs/wm8524.c @@ -0,0 +1,265 @@ +/* + * wm8524.c -- WM8524 ALSA SoC Audio driver + * + * Copyright 2009 Wolfson Microelectronics plc + * Copyright 2017 NXP + * + * Based on WM8523 ALSA SoC Audio driver written by Mark Brown + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define WM8524_NUM_RATES 7 + +/* codec private data */ +struct wm8524_priv { + struct gpio_desc *mute; + unsigned int sysclk; + unsigned int rate_constraint_list[WM8524_NUM_RATES]; + struct snd_pcm_hw_constraint_list rate_constraint; +}; + + +static const struct snd_soc_dapm_widget wm8524_dapm_widgets[] = { +SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0), +SND_SOC_DAPM_OUTPUT("LINEVOUTL"), +SND_SOC_DAPM_OUTPUT("LINEVOUTR"), +}; + +static const struct snd_soc_dapm_route wm8524_dapm_routes[] = { + { "LINEVOUTL", NULL, "DAC" }, + { "LINEVOUTR", NULL, "DAC" }, +}; + +static const struct { + int value; + int ratio; +} lrclk_ratios[WM8524_NUM_RATES] = { + { 1, 128 }, + { 2, 192 }, + { 3, 256 }, + { 4, 384 }, + { 5, 512 }, + { 6, 768 }, + { 7, 1152 }, +}; + +static int wm8524_startup(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_codec *codec = dai->codec; + struct wm8524_priv *wm8524 = snd_soc_codec_get_drvdata(codec); + + /* The set of sample rates that can be supported depends on the + * MCLK supplied to the CODEC - enforce this. + */ + if (!wm8524->sysclk) { + dev_err(codec->dev, + "No MCLK configured, call set_sysclk() on init\n"); + return -EINVAL; + } + + snd_pcm_hw_constraint_list(substream->runtime, 0, + SNDRV_PCM_HW_PARAM_RATE, + &wm8524->rate_constraint); + + gpiod_set_value_cansleep(wm8524->mute, 1); + + return 0; +} + +static void wm8524_shutdown(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_codec *codec = dai->codec; + struct wm8524_priv *wm8524 = snd_soc_codec_get_drvdata(codec); + + gpiod_set_value_cansleep(wm8524->mute, 0); +} + +static int wm8524_set_dai_sysclk(struct snd_soc_dai *codec_dai, + int clk_id, unsigned int freq, int dir) +{ + struct snd_soc_codec *codec = codec_dai->codec; + struct wm8524_priv *wm8524 = snd_soc_codec_get_drvdata(codec); + unsigned int val; + int i, j = 0; + + wm8524->sysclk = freq; + + wm8524->rate_constraint.count = 0; + for (i = 0; i < ARRAY_SIZE(lrclk_ratios); i++) { + val = freq / lrclk_ratios[i].ratio; + /* Check that it's a standard rate since core can't + * cope with others and having the odd rates confuses + * constraint matching. + */ + switch (val) { + case 8000: + case 32000: + case 44100: + case 48000: + case 88200: + case 96000: + case 176400: + case 192000: + dev_err(codec->dev, "Supported sample rate: %dHz\n", + val); + wm8524->rate_constraint_list[j++] = val; + wm8524->rate_constraint.count++; + break; + default: + dev_dbg(codec->dev, "Skipping sample rate: %dHz\n", + val); + } + } + + /* Need at least one supported rate... */ + if (wm8524->rate_constraint.count == 0) + return -EINVAL; + + return 0; +} + +static int wm8524_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) +{ + fmt &= (SND_SOC_DAIFMT_FORMAT_MASK | SND_SOC_DAIFMT_INV_MASK | + SND_SOC_DAIFMT_MASTER_MASK); + + if (fmt != (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBS_CFS)) { + dev_err(codec_dai->dev, "Invalid DAI format\n"); + return -EINVAL; + } + + return 0; +} + +static int wm8524_mute_stream(struct snd_soc_dai *dai, int mute, int stream) +{ + struct wm8524_priv *wm8524 = snd_soc_codec_get_drvdata(dai->codec); + + if (wm8524->mute) + gpiod_set_value_cansleep(wm8524->mute, mute); + + return 0; +} + +#define WM8524_RATES SNDRV_PCM_RATE_8000_192000 + +#define WM8524_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE) + +static const struct snd_soc_dai_ops wm8524_dai_ops = { + .startup = wm8524_startup, + .shutdown = wm8524_shutdown, + .set_sysclk = wm8524_set_dai_sysclk, + .set_fmt = wm8524_set_fmt, + .mute_stream = wm8524_mute_stream, +}; + +static struct snd_soc_dai_driver wm8524_dai = { + .name = "wm8524-hifi", + .playback = { + .stream_name = "Playback", + .channels_min = 2, + .channels_max = 2, + .rates = WM8524_RATES, + .formats = WM8524_FORMATS, + }, + .ops = &wm8524_dai_ops, +}; + +static int wm8524_probe(struct snd_soc_codec *codec) +{ + struct wm8524_priv *wm8524 = snd_soc_codec_get_drvdata(codec); + + wm8524->rate_constraint.list = &wm8524->rate_constraint_list[0]; + wm8524->rate_constraint.count = + ARRAY_SIZE(wm8524->rate_constraint_list); + + return 0; +} + +static const struct snd_soc_codec_driver soc_codec_dev_wm8524 = { + .probe = wm8524_probe, + + .component_driver = { + .dapm_widgets = wm8524_dapm_widgets, + .num_dapm_widgets = ARRAY_SIZE(wm8524_dapm_widgets), + .dapm_routes = wm8524_dapm_routes, + .num_dapm_routes = ARRAY_SIZE(wm8524_dapm_routes), + }, +}; + +#ifdef CONFIG_OF +static const struct of_device_id wm8524_of_match[] = { + { .compatible = "wlf,wm8524" }, + { /* sentinel*/ } +}; +MODULE_DEVICE_TABLE(of, wm8524_of_match); +#endif + +static int wm8524_codec_probe(struct platform_device *pdev) +{ + struct wm8524_priv *wm8524; + int ret; + + wm8524 = devm_kzalloc(&pdev->dev, sizeof(struct wm8524_priv), + GFP_KERNEL); + if (wm8524 == NULL) + return -ENOMEM; + + platform_set_drvdata(pdev, wm8524); + + wm8524->mute = devm_gpiod_get(&pdev->dev, "wlf,mute", GPIOD_OUT_LOW); + if (IS_ERR(wm8524->mute)) { + ret = PTR_ERR(wm8524->mute); + dev_err(&pdev->dev, "Failed to get mute line: %d\n", ret); + return ret; + } + + ret = snd_soc_register_codec(&pdev->dev, + &soc_codec_dev_wm8524, &wm8524_dai, 1); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to register codec: %d\n", ret); + snd_soc_unregister_platform(&pdev->dev); + } + + return ret; +} + +static int wm8524_codec_remove(struct platform_device *pdev) +{ + snd_soc_unregister_codec(&pdev->dev); + return 0; +} + +static struct platform_driver wm8524_codec_driver = { + .probe = wm8524_codec_probe, + .remove = wm8524_codec_remove, + .driver = { + .name = "wm8524-codec", + .of_match_table = wm8524_of_match, + }, +}; +module_platform_driver(wm8524_codec_driver); + +MODULE_DESCRIPTION("ASoC WM8524 driver"); +MODULE_AUTHOR("Mihai Serban "); +MODULE_ALIAS("platform:wm8524-codec"); +MODULE_LICENSE("GPL");