Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751461AbdHPEab (ORCPT ); Wed, 16 Aug 2017 00:30:31 -0400 Received: from mail-sn1nam02on0090.outbound.protection.outlook.com ([104.47.36.90]:27960 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750827AbdHPEa2 (ORCPT ); Wed, 16 Aug 2017 00:30:28 -0400 Authentication-Results: spf=neutral (sender IP is 117.103.190.43) smtp.mailfrom=sony.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=sony.com; From: To: , , CC: , , Yasunari Takiguchi , Masayuki Yamamoto , Hideki Nozawa , "Kota Yonezawa" , Toshihiko Matsumoto , Satoshi Watanabe Subject: [PATCH v3 03/14] [media] cxd2880: Add common files for the driver Date: Wed, 16 Aug 2017 13:33:38 +0900 Message-ID: <20170816043338.21251-1-Yasunari.Takiguchi@sony.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170816041714.20551-1-Yasunari.Takiguchi@sony.com> References: <20170816041714.20551-1-Yasunari.Takiguchi@sony.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [43.25.41.74] X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:117.103.190.43;IPV:NLI;CTRY:JP;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(39860400002)(2980300002)(199003)(189002)(2876002)(47776003)(107886003)(189998001)(512794004)(2201001)(54906002)(66066001)(86152003)(49486002)(5003940100001)(6666003)(50466002)(39060400002)(8676002)(6116002)(50226002)(3846002)(1076002)(8936002)(4326008)(5660300001)(6306002)(626005)(48376002)(305945005)(50986999)(76176999)(72206003)(5890100001)(246002)(7736002)(2906002)(7636002)(356003)(2950100002)(86362001)(478600001)(106466001)(36756003)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:CY4PR1301MB2024;H:JPYOKXEG103.jp.sony.com;FPR:;SPF:Neutral;PTR:jpyokxeg103.jp.sony.com;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02FT012;1:wA4vI2R06GTUI3RQAsdDx+EpdGAihhLVCq7CkTcA/tdxwM9SK7KUFeOzW37On1FFMhhboDTuuL4nutwawKe2dNLvyICS0zUfvtNgy1GJ/dyalT1i7DxaY8hEZRM+esLWUHwNd18izkpHhouk3yUlTn3bjxjDYWmY31uIF5LTPHBs0bQv4vlUb9YeE8h7j47nhA5ao5/HeyAW7Ogi3pjkSI/a3QA2duXpzLI2XF0DZHG1xphk5zyt169wnIziBNhpNZ9x3pE0G9lE3OREFxBhgD+txQkfjw0h8u5PKEOuWS8NPqes9ism/xXQoVKVB9QwrMWEHnm1B3qoFCAD/2pUgKhGGmXhNu6cBep/9uU9JcHKZy3DHWbAJW2//cI2JCvAJ17X6Pm8vjoRmk7RVArx7M+XrFDAyR5aFMx0mTh99ydiNWCyydNbJYQQLm95AWLNcv+33clXsP2GOyv9SkHjrAxVFp+kdHwxdJ4P03Ec65iAncvAdmb0PwD3OoOkf1B2YZOPh6huAY+K4yeWVcMIg64RCPISV613mUug5S2i51ft4WpfMHnKEF2xaPgcEhurzOp3JjHb/G004qnn8x6kdyp0yjJoJKLN9iRiFioxOvuEZm/tyxkYWrCK9mlCLbaTtJSOWhz1jkp0d7LjTXmHwniBU1ryZTZ4+MehI8i7j/Tu5z59KzzkX6NweYyDGNEGwMLmM9v5kDHtONV3F4nf/8pWqBSm82yPeFbnnEx0FRPmQREEWhDkmCgBJu3ifMq4LBiS29ulNlyMicWz4ik+kagZ1XaZwbB4EHY5+SwAdKW8K/FoFKCNBBPpec2vfdrGBlEWn3GXE2AbIkP8P+CG5qSFPinvcgiwoxHmzcBGWr5j58MEhR5qKRb9YIUKd2l7 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 35d8d1f5-b81a-412b-f895-08d4e45f83ec X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:CY4PR1301MB2024; X-Microsoft-Exchange-Diagnostics: 1;CY4PR1301MB2024;3:p/CUSCzEZBC5Dv3QSMGyPP6EUK7bcaD4GtfT42yUBgme3PsuayM6CNsWiervItl2KiAxaCstKOkzYh2Rw6tTX2umXlzgW++y2LK5HcumhKP1myA25VAJ9RLh/ITS0xeVRSKcdCEbi1wIz7i/oNIRzVfloO5LmDpfeNlFQIgBbp2qs+zuTVYlZ2XtocBoeDRtYw+HtzE3Q4cR8O2Y0xuHEf7dt5xNMsDd1u/TOLUwhILVlbZujGLlX97VNp5xmaroStdInzOCdoXl/spKEgk2wnUCC360Qr/bgo0tHk9b5/cg0GKRvivDpLmdNbyin3PoP1Yy6qjwCvqiwkyGg6+7+ZOGGMLsv7tYkBXipL7Ic7g=;25:ecDWGuu0+FbDibsVIMak2iAloZqCfRRE7U45NqAXuhoov5MYdLSWeaskIZSemWkzeIruubF0YZXd/Wq3qgs4psYYVZ45GWvxIxYYUTvF440PP8h3l9roX/cJRqKz2rBCI7frnx9S++Zrg4UDiKCei7E93Tsda8fpe/w5sQrVsG2rugo/urh9959PxNwLoHychzB85Km/bxaOrnkWhsZqX7CoiR0jQAkSoh8zeydsNUH7Z/xeEmf67jyXmBNeiZO8neunND1Zk+lRxxxozTtB3lJ5w/Y9w4ObfIyjo/C1tHhDe5TJey5YLWZy6qvkGdK4cqZJMe09U/AI+1+qsoiyOA== X-MS-TrafficTypeDiagnostic: CY4PR1301MB2024: X-Microsoft-Exchange-Diagnostics: 1;CY4PR1301MB2024;31:wHieCbdpurv9rHgWn6QEugr2DcqEbVvhqLY7gaVEZRUsoPVF/JMg/4pCwGIDsA51hIG6vOIXppRp6fEMxOOfvkD6nxzbKo+Myzy4gQl9bPhBF5HOQTVXtstKfa17AD/9RCorbKBMCUm81MhZvrRlv7rk2AhEEP7hW6OY9A30KvZn1OOBmWTbSBlV/UvcA5eoufCX7mMitNBH3u9+1o9iL1UlTroGNKlJJ8mOYBFU4Yw=;20:v26e2WhmyliU7SVgc9laxt8gpW5av2lRa87PXXDGdIVlyWZJdCBUfW8LGC/YnOUugurJ9hP9BFmGFat8Xo/cyDfGKjfGscdNwr8+tsIu6M+QBexAX1CduWnOAYGt+Lfef0rz7iHmFA2ruLK8bwjHPvL+UNkPc8I91RldX9e611+aF9oebQcgTkgmfqtsTU+AuD3IQt2rX2MkZiuwAiIDbweu/GTuOqXrUHsRguUV85Af8RQwAEnXI8OTLcCtSU0dX4HTEvtHHitdkovxOJdNcDNpKlVBQFrEp4o9rUEbu76ss7la9dD+f088ATDgLqM1O/tGgLTdsv6z6j51yTXhKCBkHth014/7jUa1byVXYt2G9Jni9/XMs3tcYvRczyiGcTiPHIJhWLkQvM1iEVdbzuQco1ERAOvZCamR9CcUTO81ODIVUohLznM5Y4Kl4JWPHwoipsrzpETQ1S0TeoZwdH8IbXvq0Fq+pfvj0II688OuFwQ/vEciModcLAaeGcKF X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(182409339516656)(22074186197030); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(13016025)(13018025)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93003095)(6055026)(6041248)(20161123560025)(20161123558100)(20161123564025)(20161123562025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR1301MB2024;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR1301MB2024; X-Microsoft-Exchange-Diagnostics: 1;CY4PR1301MB2024;4:4V15J963SFLuTQU7RiCXfwlmYbCJdrkHER7uDlcZy+vcRqQ2XVpQdHe5od8ojmVGCPEoT08qb5I+fPkWqkGo4X0HWkTplY9IxR1rTja1/64GZIRfH01wB9R/ZWNealW3AaZA/CNoyZTCSj+IB+c4wCwtdKOYgT4sVEnSKuX0CHxMDuYk79vFgefCk6x77lVn+0y1VpDD7iIsasVKSmavHS8mWaJscmdMGvVj9Q9DbUDJyNjJEYs8avJ0DTXkEgKNemCcQhZdV48zL1GDKnVDjcYOneg8EBhHuHrKhdS+N9bxOXGwjpKLYBxiRz2x9UXz0aqy4NQhAXfW0ndMUIEoMwWQI4RyvNa7zAcqFqp1iE67Nq2ywwpaqb1zv9icdz90 X-Forefront-PRVS: 0401647B7F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR1301MB2024;23:ogopG9jADU8Cii/ppc5qbrQeEpmRrkTxjGY2UYY?= =?us-ascii?Q?vZt/VJKa0FdRh6aj1h6rtXfoWanwVmy/CgI4zHTj24R98gyoyADj1u+F68er?= =?us-ascii?Q?vdDB2cl5TuNg8MpWmq26VZSsVEfzCzgOPoEtICyMeD+JMZvXzioufA9kM3g7?= =?us-ascii?Q?MWz7c4igHw0lNqF+iEt+1aIU7VC35SqI6cLrfAql0uLaHhyB5bKA52eH1/ED?= =?us-ascii?Q?92qNYPn8B+bwKaL7uI2EGv762AXU8TwXPZecBh5I4q8iHih/KuOA3LRCP4aW?= =?us-ascii?Q?nZjBeapQlZTgKostgsZZJSGf4g96LlH/RhZzF17ul7f58peP911Bdas8PfEi?= =?us-ascii?Q?eUQ66xsClWyv7Rv4Y5dO8L0SIojCNMt+lEw98Y0DAOQYbTCLLLp9dNSsqvif?= =?us-ascii?Q?kJZLxY8HllM8MmB7FdmrfgU50O+9n4xqJwGjM0++HPC9lRj7CfdQk6/LE5FE?= =?us-ascii?Q?jEnx9evaaT2HdFbj0HLSwKKitEVNfYyHiN6hlNCeyFG4O27PqlTRiH2V3mzv?= =?us-ascii?Q?BTzkzSzPgeqNsmtAlAXpBMp44IexjJk4/I/95PzrxxwzIVkOdHZTct6OSczz?= =?us-ascii?Q?SB/KjrnAK5cbxB6MDoO0PJ+554vED0Bw6p5pSMdnbGyxIZs88wx5oFX8G+Cm?= =?us-ascii?Q?UahButevV0nA3Z8wQPSs0E2vumW5obLy79oJAOAk+bSo2yZAxOT+vnXtV5iK?= =?us-ascii?Q?LhJwzv2CnyPucWO1kSyp/u7PAcLfVk9Xe+JR0dMxajvToGKpcR4JH78WNwrW?= =?us-ascii?Q?w7KyW6oeAQJKQgFJdidOE7w6R4hIQCd+imWPJHKIevY2vnWX/YOcZl5sEVhb?= =?us-ascii?Q?i1rJ344AURpAgufG8lpWsrzMt0bCkcKV01Czx1AB8PVTml3wPzju0+JtSyci?= =?us-ascii?Q?wNrClX6dtiUSDAIBSRoGDh4twKvPnlF4CwdLA6zJtekgamrQiHFkas87juUy?= =?us-ascii?Q?oGuBHp8reWEaDICuiWXxhu40E02maYNC6M7sacapYCpq68vR8FFhiKaM/V+8?= =?us-ascii?Q?0d1q9Ilpl4An7EaLraGMeG6+YgWgI6YcHk4eBP2KxqQxOT1JADbZlmqCEhBc?= =?us-ascii?Q?FkXZyF2BWlWeD4v8r0f/2WHCODDFHEjPUVFKKrjvJERtildj7dg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR1301MB2024;6:0lJui9gC6uTvaIsddmboJV3EbIYGGxRufIGu/utfaQD/MpWn47IqKwgNyZaJOdiU34UbyuIR4z+dm+2K/k9CfAQQ+l+Dar8s6EuDcZkag73GZwaWV41qBB6EWJqefCFsbBXE7pgsVhEmgb/1UrC7FBJPgPKFYUmKumQHoi8HXwMusg1YEY1F5MdgNlNJ3Wmb0448z77Dbug01KLNDJFNIP/9a3DG0VVqJcUzovd/4RyHle8KTIIULcTeOZ1UUOZgYgEG7RzclnFsvNNTW/5xOciCE/fjEE+QWE703a6+XusE/ZoYwj7vZtd4TkWqN4QjeTBc+d1iipXhFyQUpO9g2w==;5:cVv4p3gyD07N8U8U8zwLUjx9ZxMdMrHjcQtEVkeg4WnvqtlNahSBOimD93GIgRtA3XtOtwQHrWHNaoJFboh9RRRuuUQV5DDFrf6BjngotczC1NZouNP0VFOiG1DESNwvtmFQui1J1WFuMqYchvY0UQ==;24:LAIHzVsRArQGSMmU3NY47hu6XckwTWzLfsq5hVHq8tdqZR+efG4QYhYV1wEd2/XRZB0Trg9j+lT3gQdSFDW2pXRgumHqqlcSoxJVvOBXNhc=;7:tdkd2MD3B2I8l4YbdH0Pg8a7hvfSdtOSbZRJIK1qJbG/3egSQe0p1KltuoeNZRZCeG6Z4S30sgxLdEF0trZLN6PfRS7/dciGp3mIPP9rQe4n0mcFTeKkiuTNyU7e36X1+/zrgrF21lWLX9c1yMRprZGKKge8ZTFOadr5+rqKgaYQsGIolp+gEoGZGVjFRDWnD9l1r7qidl/b28ZvvZx23P4D/vEEMg7vNeCoPd4DD3k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: sony.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2017 04:30:24.7610 (UTC) X-MS-Exchange-CrossTenant-Id: 66c65d8a-9158-4521-a2d8-664963db48e4 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=66c65d8a-9158-4521-a2d8-664963db48e4;Ip=[117.103.190.43];Helo=[JPYOKXEG103.jp.sony.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1301MB2024 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 15532 Lines: 415 From: Yasunari Takiguchi These are common files for the driver for the Sony CXD2880 DVB-T2/T tuner + demodulator. These contains helper functions for the driver. [Change list] Changes in V3 drivers/media/dvb-frontends/cxd2880/cxd2880.h -no change drivers/media/dvb-frontends/cxd2880/cxd2880_common.c -changed MASKUPPER/MASKLOWER with GENMASK drivers/media/dvb-frontends/cxd2880/cxd2880_common.h -removed definition NULL and SONY_SLEEP -changed CXD2880_SLEEP to usleep_range -changed cxd2880_atomic_set to atomic_set -removed cxd2880_atomic struct and cxd2880_atomic_read -changed stop-watch function -modified return code drivers/media/dvb-frontends/cxd2880/cxd2880_io.c -removed unnecessary cast -modified return code -changed hexadecimal code to lower case. drivers/media/dvb-frontends/cxd2880/cxd2880_io.h -modified return code drivers/media/dvb-frontends/cxd2880/cxd2880_stopwatch_port.c -changed CXD2880_SLEEP to usleep_range -changed stop-watch function -modified return code #drivers/media/dvb-frontends/cxd2880/cxd2880_stdlib.h -cxd2880_stdlib.h file was removed from V3. Signed-off-by: Yasunari Takiguchi Signed-off-by: Masayuki Yamamoto Signed-off-by: Hideki Nozawa Signed-off-by: Kota Yonezawa Signed-off-by: Toshihiko Matsumoto Signed-off-by: Satoshi Watanabe --- drivers/media/dvb-frontends/cxd2880/cxd2880.h | 46 +++++++++++++++ .../media/dvb-frontends/cxd2880/cxd2880_common.c | 38 ++++++++++++ .../media/dvb-frontends/cxd2880/cxd2880_common.h | 50 ++++++++++++++++ drivers/media/dvb-frontends/cxd2880/cxd2880_io.c | 68 ++++++++++++++++++++++ drivers/media/dvb-frontends/cxd2880/cxd2880_io.h | 62 ++++++++++++++++++++ .../dvb-frontends/cxd2880/cxd2880_stopwatch_port.c | 60 +++++++++++++++++++ 6 files changed, 324 insertions(+) create mode 100644 drivers/media/dvb-frontends/cxd2880/cxd2880.h create mode 100644 drivers/media/dvb-frontends/cxd2880/cxd2880_common.c create mode 100644 drivers/media/dvb-frontends/cxd2880/cxd2880_common.h create mode 100644 drivers/media/dvb-frontends/cxd2880/cxd2880_io.c create mode 100644 drivers/media/dvb-frontends/cxd2880/cxd2880_io.h create mode 100644 drivers/media/dvb-frontends/cxd2880/cxd2880_stopwatch_port.c diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880.h b/drivers/media/dvb-frontends/cxd2880/cxd2880.h new file mode 100644 index 000000000000..281f9a784eb5 --- /dev/null +++ b/drivers/media/dvb-frontends/cxd2880/cxd2880.h @@ -0,0 +1,46 @@ +/* + * cxd2880.h + * Sony CXD2880 DVB-T2/T tuner + demodulator driver public definitions + * + * Copyright (C) 2016, 2017 Sony Semiconductor Solutions Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; version 2 of the License. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#ifndef CXD2880_H +#define CXD2880_H + +struct cxd2880_config { + struct spi_device *spi; + struct mutex *spi_mutex; /* For SPI access exclusive control */ +}; + +#if IS_REACHABLE(CONFIG_DVB_CXD2880) +extern struct dvb_frontend *cxd2880_attach(struct dvb_frontend *fe, + struct cxd2880_config *cfg); +#else +static inline struct dvb_frontend *cxd2880_attach(struct dvb_frontend *fe, + struct cxd2880_config *cfg) +{ + pr_warn("%s: driver disabled by Kconfig\n", __func__); + return NULL; +} +#endif /* CONFIG_DVB_CXD2880 */ + +#endif /* CXD2880_H */ diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880_common.c b/drivers/media/dvb-frontends/cxd2880/cxd2880_common.c new file mode 100644 index 000000000000..ffaa140bb8cb --- /dev/null +++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_common.c @@ -0,0 +1,38 @@ +/* + * cxd2880_common.c + * Sony CXD2880 DVB-T2/T tuner + demodulator driver + * common functions + * + * Copyright (C) 2016, 2017 Sony Semiconductor Solutions Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; version 2 of the License. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "cxd2880_common.h" + +int cxd2880_convert2s_complement(u32 value, u32 bitlen) +{ + if ((bitlen == 0) || (bitlen >= 32)) + return (int)value; + + if (value & (u32)(1 << (bitlen - 1))) + return (int)(GENMASK(31, bitlen) | value); + else + return (int)(GENMASK(bitlen - 1, 0) & value); +} diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880_common.h b/drivers/media/dvb-frontends/cxd2880/cxd2880_common.h new file mode 100644 index 000000000000..cf6b800809ee --- /dev/null +++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_common.h @@ -0,0 +1,50 @@ +/* + * cxd2880_common.h + * Sony CXD2880 DVB-T2/T tuner + demodulator driver common definitions + * + * Copyright (C) 2016, 2017 Sony Semiconductor Solutions Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; version 2 of the License. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#ifndef CXD2880_COMMON_H +#define CXD2880_COMMON_H + +#include +#include +#include +#include + +#define CXD2880_ARG_UNUSED(arg) ((void)(arg)) + +int cxd2880_convert2s_complement(u32 value, u32 bitlen); + +struct cxd2880_stopwatch { + unsigned long start_time; +}; + +int cxd2880_stopwatch_start(struct cxd2880_stopwatch *stopwatch); + +int cxd2880_stopwatch_sleep(struct cxd2880_stopwatch *stopwatch, + u32 ms); + +int cxd2880_stopwatch_elapsed(struct cxd2880_stopwatch *stopwatch, + unsigned int *elapsed); + +#endif diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880_io.c b/drivers/media/dvb-frontends/cxd2880/cxd2880_io.c new file mode 100644 index 000000000000..38dd8b04a514 --- /dev/null +++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_io.c @@ -0,0 +1,68 @@ +/* + * cxd2880_io.c + * Sony CXD2880 DVB-T2/T tuner + demodulator driver + * register I/O interface functions + * + * Copyright (C) 2016, 2017 Sony Semiconductor Solutions Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; version 2 of the License. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include "cxd2880_io.h" + +int cxd2880_io_common_write_one_reg(struct cxd2880_io *io, + enum cxd2880_io_tgt tgt, + u8 sub_address, u8 data) +{ + int ret = 0; + + if (!io) + return -EINVAL; + + ret = io->write_regs(io, tgt, sub_address, &data, 1); + + return ret; +} + +int cxd2880_io_set_reg_bits(struct cxd2880_io *io, + enum cxd2880_io_tgt tgt, + u8 sub_address, u8 data, u8 mask) +{ + int ret = 0; + + if (!io) + return -EINVAL; + + if (mask == 0x00) + return 0; + + if (mask != 0xff) { + u8 rdata = 0x00; + + ret = io->read_regs(io, tgt, sub_address, &rdata, 1); + if (ret) + return ret; + + data = (data & mask) | (rdata & (mask ^ 0xff)); + } + + ret = io->write_reg(io, tgt, sub_address, data); + + return ret; +} diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880_io.h b/drivers/media/dvb-frontends/cxd2880/cxd2880_io.h new file mode 100644 index 000000000000..11a045720110 --- /dev/null +++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_io.h @@ -0,0 +1,62 @@ +/* + * cxd2880_io.h + * Sony CXD2880 DVB-T2/T tuner + demodulator driver + * register I/O interface definitions + * + * Copyright (C) 2016, 2017 Sony Semiconductor Solutions Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; version 2 of the License. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#ifndef CXD2880_IO_H +#define CXD2880_IO_H + +#include "cxd2880_common.h" + +enum cxd2880_io_tgt { + CXD2880_IO_TGT_SYS, + CXD2880_IO_TGT_DMD +}; + +struct cxd2880_io { + int (*read_regs)(struct cxd2880_io *io, + enum cxd2880_io_tgt tgt, u8 sub_address, + u8 *data, u32 size); + int (*write_regs)(struct cxd2880_io *io, + enum cxd2880_io_tgt tgt, u8 sub_address, + const u8 *data, u32 size); + int (*write_reg)(struct cxd2880_io *io, + enum cxd2880_io_tgt tgt, u8 sub_address, + u8 data); + void *if_object; + u8 i2c_address_sys; + u8 i2c_address_demod; + u8 slave_select; + void *user; +}; + +int cxd2880_io_common_write_one_reg(struct cxd2880_io *io, + enum cxd2880_io_tgt tgt, + u8 sub_address, u8 data); + +int cxd2880_io_set_reg_bits(struct cxd2880_io *io, + enum cxd2880_io_tgt tgt, + u8 sub_address, u8 data, u8 mask); + +#endif diff --git a/drivers/media/dvb-frontends/cxd2880/cxd2880_stopwatch_port.c b/drivers/media/dvb-frontends/cxd2880/cxd2880_stopwatch_port.c new file mode 100644 index 000000000000..a4a1e29de653 --- /dev/null +++ b/drivers/media/dvb-frontends/cxd2880/cxd2880_stopwatch_port.c @@ -0,0 +1,60 @@ +/* + * cxd2880_stopwatch_port.c + * Sony CXD2880 DVB-T2/T tuner + demodulator driver + * time measurement functions + * + * Copyright (C) 2016, 2017 Sony Semiconductor Solutions Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; version 2 of the License. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#include + +#include "cxd2880_common.h" + +int cxd2880_stopwatch_start(struct cxd2880_stopwatch *stopwatch) +{ + if (!stopwatch) + return -EINVAL; + + stopwatch->start_time = jiffies; + + return 0; +} + +int cxd2880_stopwatch_sleep(struct cxd2880_stopwatch *stopwatch, + u32 ms) +{ + if (!stopwatch) + return -EINVAL; + CXD2880_ARG_UNUSED(*stopwatch); + usleep_range(ms * 10000, ms * 10000 + 1000); + + return 0; +} + +int cxd2880_stopwatch_elapsed(struct cxd2880_stopwatch *stopwatch, + unsigned int *elapsed) +{ + if (!stopwatch || !elapsed) + return -EINVAL; + *elapsed = jiffies_to_msecs(jiffies - stopwatch->start_time); + + return 0; +} -- 2.13.0