From patchwork Fri May 18 15:23:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Popa X-Patchwork-Id: 10411049 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 D4D5F602CB for ; Fri, 18 May 2018 15:24:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C2B07289FB for ; Fri, 18 May 2018 15:24:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B466428A00; Fri, 18 May 2018 15:24:10 +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=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0190A289FB for ; Fri, 18 May 2018 15:24:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752343AbeERPXz (ORCPT ); Fri, 18 May 2018 11:23:55 -0400 Received: from mail-by2nam01on0079.outbound.protection.outlook.com ([104.47.34.79]:52544 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752083AbeERPXx (ORCPT ); Fri, 18 May 2018 11:23:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.onmicrosoft.com; s=selector1-analog-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QIZtuYtfrZYO4gvvkaksCc2ZR9vGQ462yQuiBLFPVT8=; b=kAz8l1wbuxWRCFc2cy7K13h+l0TzUmsDhzSgj4OMWzhRFpgwrYlPhg8YZMJdq2v/MYEJWewhs3lIbuXmkbnojD5m5E6Ue1iMxiaJMiTQGAjVwSSDKESmUIS0q94JymHnCBH4SjBfrKJbaDnBTf0GCHvFU3ESKZ196eh9r1txowY= Received: from BN6PR03CA0062.namprd03.prod.outlook.com (2603:10b6:404:4c::24) by BN6PR03MB3043.namprd03.prod.outlook.com (2603:10b6:404:111::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.776.11; Fri, 18 May 2018 15:23:51 +0000 Received: from BY2FFO11OLC009.protection.gbl (2a01:111:f400:7c0c::101) by BN6PR03CA0062.outlook.office365.com (2603:10b6:404:4c::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.776.11 via Frontend Transport; Fri, 18 May 2018 15:23:50 +0000 Authentication-Results: spf=pass (sender IP is 137.71.25.57) smtp.mailfrom=analog.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=analog.com; Received-SPF: Pass (protection.outlook.com: domain of analog.com designates 137.71.25.57 as permitted sender) receiver=protection.outlook.com; client-ip=137.71.25.57; helo=nwd2mta4.analog.com; Received: from nwd2mta4.analog.com (137.71.25.57) by BY2FFO11OLC009.mail.protection.outlook.com (10.1.15.0) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.735.16 via Frontend Transport; Fri, 18 May 2018 15:23:50 +0000 Received: from NWD2HUBCAS8.ad.analog.com (nwd2hubcas8.ad.analog.com [10.64.69.108]) by nwd2mta4.analog.com (8.13.8/8.13.8) with ESMTP id w4IFNn6I023266 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=OK); Fri, 18 May 2018 08:23:49 -0700 Received: from zeus.spd.analog.com (10.64.82.11) by NWD2HUBCAS8.ad.analog.com (10.64.69.108) with Microsoft SMTP Server id 14.3.301.0; Fri, 18 May 2018 11:23:49 -0400 Received: from linux.analog.com ([10.50.1.113]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id w4IFNkcn032576; Fri, 18 May 2018 11:23:47 -0400 From: Stefan Popa To: , , CC: , , , , , Subject: [PATCH v2 2/2] iio:dac:ad5686: Add AD5681R/AD5682R/AD5683/AD5683R support Date: Fri, 18 May 2018 18:23:34 +0300 Message-ID: <1526657014-28960-1-git-send-email-stefan.popa@analog.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:137.71.25.57; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(346002)(39860400002)(39380400002)(396003)(376002)(2980300002)(438002)(189003)(199004)(2201001)(26005)(478600001)(77096007)(5660300001)(106002)(53416004)(316002)(106466001)(107886003)(966005)(186003)(7696005)(54906003)(6306002)(8666007)(51416003)(575784001)(110136005)(426003)(305945005)(356003)(7636002)(476003)(2616005)(50466002)(47776003)(126002)(486006)(246002)(336012)(4326008)(6666003)(8936002)(72206003)(36756003)(2906002)(8676002)(50226002)(44832011)(16586007)(48376002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR03MB3043; H:nwd2mta4.analog.com; FPR:; SPF:Pass; LANG:en; PTR:nwd2mail11.analog.com; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC009; 1:4q2ZBIVHgbMQVnplb2yFFMZI152BjatvlpxuZNPKV2KtV3L2JGjpgOtKuJ4yy76z2BuTpEk8wIURP4H3KoumRfvIuOV8WKXW+7b/jCo9FnOkHEu8Sa+VCDXZsD/KSk+W X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4608076)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BN6PR03MB3043; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB3043; 3:TTBPZ+WOjlfAPj+m1zQl/zmJq2VDqrakRT71TZ4w0jGJGXRzfoDHX0i/9U/sefKmtgo8B0Zl5VDT8bY5HoHkk1+M70oImiBKrK4VZswsDXPJdj3k0qWwwZvGpAo8vlV1Z661d18aTqXGlDCzu/CvgJwRkj4EcvyhVXk6cz2I8XMUrzN2ORC+zoRGip7hoPC8Vk3nWSLWHcbfnyzVIfZT88pL9If7kjQmW2cKLDAdlxusaDEw4SKoEKTEa+tfe8G+Hc7h0SeF41emXOqYTBbBWbWhVdAbxtxiqrqzYIHSrkikNmU7Q8vAwI40TkwCkyiD/FJfq8EO4+i+6RKoEsXeBQMtVuAwfyoiKkRaM6Bfq/E=; 25:QCobmNnVbwEADDYiScAxk2mNczXg8v3RZMNrf5cFQGURMcqf7WIh7T0TyzWQAN9bU+CtGoksQTRvD69DixvEhxEWjOCIIE+4YjJE7Q6Zw4yFBewjSIIiLhAIaC+OOmGNqSKWnS72UPGzcliePZ4yvlI2evU5hxH8S2AbkCFyCAvAkQ2vj6eJHOS2qRuo6iNaG2fDDZFWiYBF+DtW6M84asZAkiV6vUsVMvBdpora1wNQjhaDvsayzjU8yN2uwptFPKauLHQVSF7MSNBWF3gwck08px6GVPv8oJZJ9hahjwTNZT48iaS3i+Sfh1JnJPDrA4J7qEfjRlP7G7OsH02XIA== X-MS-TrafficTypeDiagnostic: BN6PR03MB3043: X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB3043; 31:VGVUd1JLpElb30duDDZR+k8HIQKQLG8nH55wBtQIfVMX+bQisvvzVTV5KSjm97bD9ky8IEKPNFPK7LzoZPDhzBazRT0wxwboSfIXSf9ZpT/6I+Enou9TY80/ySchAUxKRNSiguR9ZkV90Wh0XEPFGWajPzuG0bezL1j67ixeZZCvSKoMkxvh96AkBFZDg4TlYaYJ4F8lzyX3HUhEoOBLe6wVNE1WFYVSQ3myRAWMfkI=; 20:dBuDRYHEeM/cMyCimo3vlPOktZiXAYp4/mdGVElHdmjQ33QHFb7c3IvE6h891oIPTQkyumF9QoeD8IXFERavymuwiAo+1E3SAwHWWqfD2GMtUWfpUNi/MZMFwTlpejyYLGDY6VJdnzMhe3E3vVA0MAiKpY3Y0UKdNUiadpcqTpXaWgpFW4/Vs1ASTzo94pl9/q8II0sTlKnAnUbSyNSamRmDj4AUQLv0d/jhqqz83C8OQ7gkQu2QHt+SWshiVwG1spsytPDeOuob/zG05PYullQ0TrBJYdcwx5XtAwftq9ZG04IwYSxX8U9s3jIr6jCXahpmxcipWbZtipU6Qe8tc4ACYcwyWiPi+4eVeE55ObPCtzbJ/Pi7gsD7taFPGOUdjJNW1x5SECx5fbdnvDRrC+YpQoyWYZ3JaImodMfKvRtH0obzk9vEDGP3w0+ltEga+aBRCJuZqWqTzaSLmhWShQz4XV/JjxQqZ8zqVIyImZZM8EzoGJVXnMNnN5aNL3rP X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(270121546159015)(232431446821674)(17755550239193); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93004095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123560045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:BN6PR03MB3043; BCL:0; PCL:0; RULEID:; SRVR:BN6PR03MB3043; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB3043; 4:H8Pfbh/rLkUOnQBIv/geRhZikRxbLjiB0YjJKnYSs5fekj3WTVYs3kBNHg5+o/kQRMoV/fVydK6M6CVM02MaSYQ4CsAvN6kncQMEnB8G4Vh3CD0kVxQJPtaQslFMcDQC6JSsBK/wUKt3d/v3cXAe8o2GSP5XXZ0DwFKSk9HUbKkvOxrl5DE4rnJiGxA7CUm3tkJW9VPIFTgq5HYn1NSXKifkMk81yCCDYdFAYEhoIxsKqgHslKYxljcGS+PUzJ3sOqwUzh7huLtvM6VHCIKlEa7wx8DMJhehcBRibiqLQ572N4SaJUifQJTXuwTimYJuMnfM/Jp/9WNsvz5yjjVtsVdk4xGQ+cTaMf4snN5i4DLWnTJ4jj0cJa9smugrJATF X-Forefront-PRVS: 0676F530A9 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN6PR03MB3043; 23:9XeCPQvX3bnsbOkwgK7Df+yiNv/d0Efi2NSZO+aFz?= =?us-ascii?Q?/uM2AwtXT/jVF65t3AUGXEtHZQmyCR7J9JDy37LWT33tP7YOqT3uAPispdZJ?= =?us-ascii?Q?heeQx382rLj5HO/dhsV0gzLKmzwgJzBt5O233qYChW0bh53473pQEUwHPdse?= =?us-ascii?Q?Nj/pXKwXIWu2AWRJ+5lGp6aolXXdDJDuVgJR3qaYibJcBOLQRjDLKO2IkIVR?= =?us-ascii?Q?JI3yx0ck6Db6TUax2P+nw2LOWzXUkW3OupThm3r9g62vF2db2VryjeYNNW0X?= =?us-ascii?Q?aqKJevl5MQp7eQxcTvjtwrXFes0p9FB4TmkDI72CsuhBwW5b3StM4+DfLGRB?= =?us-ascii?Q?5UtdiQXwLVjMII+mYTvWihsvCZhmxuQ3u9mshfI05SGGgjeEF8W+ECrnh9qY?= =?us-ascii?Q?tSQcuZcn6eLvBZt5VyBYOhb5mu9BncVkACzmo08GRr3GPJbf5JR5JfsXH79u?= =?us-ascii?Q?LldjFfeRHEgaZQaMDuhm/qUKRRJT4ZqpJCmEgsfCoNha94x2tW3euep16RL5?= =?us-ascii?Q?VQHbT0EAlryv+5RfRqf/hMywaZgzvF/XLBePEIWaThHoad7eygICaKG5Rxrl?= =?us-ascii?Q?MpArkQPmBxRIckUmaoAlbyRVooN0kRSa0tSX//GJ53wO4i0b+aKaWmRg+MXC?= =?us-ascii?Q?PYLfjyHvvIrm/qsIToBHL5JrtEnHHcu+Kxb50XGK5rUPkYGavHhP/pZVixRy?= =?us-ascii?Q?2ZwQXk9OdFGRTmIqWOlWK4R06iMOVI40mbc/6EAaV1IfGJjRTMZTv4+SYs0E?= =?us-ascii?Q?oc+aCP9ubwUh76DFzfsyJD/zxW1TMWUv6CvXBKr6DqZLXnGnkUTCto88C4RN?= =?us-ascii?Q?ASC0ti2zEoSJVE+07vclCRjXZDcq75kN4ei295vsIwhNTstMqV1Q0Tfu9jyq?= =?us-ascii?Q?Wvh539bxDeGO+faGDHcIWbj8SDrZsd6BJjP0Zeyx5zhqT/5psPJW9BXAbbag?= =?us-ascii?Q?Qy4GyGY4kwWGLBD60wCG3nAa1qY4Nx/wlNkBLKWda2xnBJNUb9RrIKhs8esn?= =?us-ascii?Q?JJylQ6yfANKhiHFwhregDfwEUfQ2zqXSN/P4SiOjtngLicrhA7Dfa/f5HInf?= =?us-ascii?Q?FzN/9Kz+wCro0Y84JSi8CmGndTHjkQ1hz4dequCS1MIuo9eAH4MuY3uRdfKP?= =?us-ascii?Q?5N7RlpGRdM=3D?= X-Microsoft-Antispam-Message-Info: Q12U+/cWGHZt4aTWz+Me9e2TFlKmT4vykuj8USphMfiv5GVRIB/qm6mlHj7dipSYDR0h+Mcv18xKTVIbVYBEeWBHcNTEkRNnjQEYLD6UaFLH8unAGke2lEuUdhh27IZtdd7PHQbNGk7AJg3PHrlWI6oywd6cRvrBGxzkgCAw/5QEmLg2EFt/LuwiUfw/CN3z X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB3043; 6:SeWq8XySQKJYperfr8EJx13T7/qb1u8xWnxNRicHmV0EZe2hJd+WtikqTVffmsXgf1Hqk+CN/Y2A2xgVywTP4lyxb9gRmOCoNwRi/8NVXOD9BCcSRaQWgZwdisHHKZZPF4+njYBBzXywDXp8AUlcAvHahA2yvRshasY2mi/3tF8nkSvVb9wmeC34ugkGBseGj7LedVAmSGfUQnsnUL4dboCalJBmBukvq+dqutssF7nNUu0a3jASp222xqQf81yQtZrql2/45JsOHa3hrQYeHm8ymfnCWpF4eN92zpRD0ze+wgqpUJNDgRX4G5TclmTyUWVRgKkTWIbAkxpqPT8734cuWMJHEjl6ArPuPjg8QkmWpSbJvpsgBGVWI0iyQqducq0zjJ9xYgsdiJnbNEdxchQmsAIuzCgiFA/1UcA1TxjkBG3jl+6Dn+8E90uSPT2pPVUtAMBUlIofABJQHFpYzw==; 5:TRtwfz8I4AjAgRS79e824nWdyJ1GwuEOxGR9mTlAXo6UPiiUUHVnUsaXC3n6RPBONz9cgSElKf1CEqOLIAfeLta9dnYnfKZ2Fx4zBHV+IzY4Tv7zntS7ELlirpBw+o2pnx+cr7XWMoh2sBg7PNVK4U9d3RzJO4UNLjSh4UDjcoQ=; 24:/Q6o/BxUOgHNgkeMIMrJhDbVKTVM31wV8YFDRYPCBc8HUWOn1akf/UtaOPXIRdp4r9/hYJYQWsB/GVTNNssQihyMRnzDOWIBtNxATAwOmfg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB3043; 7:UgxhVhsO+ap2fpBd1InqrGsyvx1lzdwT2TAfeByA9wZH1lES+NlhzlYnO713onphPXD0hj7T691v9pQMzo5zA0VqyxWuUPPwTELORbe8D0cNqqa7beVEXZKqH+2IIXWUkys1Rm8KMP4fUti93H3ZjDBNplTufAd9dw9HjHNuiOolTjja0JkQkKMOSdDh2cIMKh8Pc3FCVWnPdmIOKFxm5OSI9N8el0yGXmO/hToD2Q3HonDf7iRt4eeWVF6thaBy X-MS-Office365-Filtering-Correlation-Id: 8713e430-93d9-4c92-33bb-08d5bcd35c16 X-OriginatorOrg: analog.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2018 15:23:50.8909 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8713e430-93d9-4c92-33bb-08d5bcd35c16 X-MS-Exchange-CrossTenant-Id: eaa689b4-8f87-40e0-9c6f-7228de4d754a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=eaa689b4-8f87-40e0-9c6f-7228de4d754a; Ip=[137.71.25.57]; Helo=[nwd2mta4.analog.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR03MB3043 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The AD5681R/AD5682R/AD5683/AD5683R are a family of one channel DACs with 12-bit, 14-bit and 16-bit precision respectively. The devices have either no built-in reference, or built-in 2.5V reference. These devices are similar to AD5691R/AD5692R/AD5693/AD5693R except with a few notable differences: * they use the SPI interface instead of I2C * in the write control register, DB18 and DB17 are used for setting the power mode, while DB16 is the REF bit. This is why a new regmap type was defined and checked accordingly. * the shift register is 24 bits wide, the first four bits are the command bits followed by the data bits. As the data comprises of 20-bit, 18-bit or 16-bit input code, this means that 4 LSB bits are don't care. This is why the data needs to be shifted on the left with four bits. Therefore, AD5683_REGMAP is checked inside a switch case in the ad5686_spi_write() function. On the other hand, similar devices such as AD5693R family, have the 4 MSB command bits followed by 4 don't care bits. Datasheet: http://www.analog.com/media/en/technical-documentation/data-sheets/AD5683R_5682R_5681R_5683.pdf Signed-off-by: Stefan Popa --- Changes in v2: - Nothing changed, just to follow the patch set version. drivers/iio/dac/ad5686-spi.c | 42 ++++++++++++++++++++++++++++++++++-------- drivers/iio/dac/ad5686.c | 32 ++++++++++++++++++++++++++++++++ drivers/iio/dac/ad5686.h | 8 ++++++++ 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/drivers/iio/dac/ad5686-spi.c b/drivers/iio/dac/ad5686-spi.c index 6bb09e9..1df9143 100644 --- a/drivers/iio/dac/ad5686-spi.c +++ b/drivers/iio/dac/ad5686-spi.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * AD5672R, AD5676, AD5676R, AD5684, AD5684R, AD5684R, AD5685R, AD5686, AD5686R + * AD5672R, AD5676, AD5676R, AD5681R, AD5682R, AD5683, AD5683R, + * AD5684, AD5684R, AD5685R, AD5686, AD5686R * Digital to analog converters driver * * Copyright 2018 Analog Devices Inc. @@ -15,12 +16,27 @@ static int ad5686_spi_write(struct ad5686_state *st, u8 cmd, u8 addr, u16 val) { struct spi_device *spi = to_spi_device(st->dev); - - st->data[0].d32 = cpu_to_be32(AD5686_CMD(cmd) | - AD5686_ADDR(addr) | - val); - - return spi_write(spi, &st->data[0].d8[1], 3); + u8 tx_len, *buf; + + switch (st->chip_info->regmap_type) { + case AD5683_REGMAP: + st->data[0].d32 = cpu_to_be32(AD5686_CMD(cmd) | + AD5683_DATA(val)); + buf = &st->data[0].d8[1]; + tx_len = 3; + break; + case AD5686_REGMAP: + st->data[0].d32 = cpu_to_be32(AD5686_CMD(cmd) | + AD5686_ADDR(addr) | + val); + buf = &st->data[0].d8[1]; + tx_len = 3; + break; + default: + return -EINVAL; + } + + return spi_write(spi, buf, tx_len); } static int ad5686_spi_read(struct ad5686_state *st, u8 addr) @@ -37,9 +53,15 @@ static int ad5686_spi_read(struct ad5686_state *st, u8 addr) }, }; struct spi_device *spi = to_spi_device(st->dev); + u8 cmd = 0; int ret; - st->data[0].d32 = cpu_to_be32(AD5686_CMD(AD5686_CMD_READBACK_ENABLE) | + if (st->chip_info->regmap_type == AD5686_REGMAP) + cmd = AD5686_CMD_READBACK_ENABLE; + else if (st->chip_info->regmap_type == AD5683_REGMAP) + cmd = AD5686_CMD_READBACK_ENABLE_V2; + + st->data[0].d32 = cpu_to_be32(AD5686_CMD(cmd) | AD5686_ADDR(addr)); st->data[1].d32 = cpu_to_be32(AD5686_CMD(AD5686_CMD_NOOP)); @@ -67,6 +89,10 @@ static const struct spi_device_id ad5686_spi_id[] = { {"ad5672r", ID_AD5672R}, {"ad5676", ID_AD5676}, {"ad5676r", ID_AD5676R}, + {"ad5681r", ID_AD5681R}, + {"ad5682r", ID_AD5682R}, + {"ad5683", ID_AD5683}, + {"ad5683r", ID_AD5683R}, {"ad5684", ID_AD5684}, {"ad5684r", ID_AD5684R}, {"ad5685", ID_AD5685R}, /* Does not exist */ diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c index 1fc0c56..e136f0f 100644 --- a/drivers/iio/dac/ad5686.c +++ b/drivers/iio/dac/ad5686.c @@ -83,6 +83,10 @@ static ssize_t ad5686_write_dac_powerdown(struct iio_dev *indio_dev, st->pwr_down_mask &= ~(0x3 << (chan->channel * 2)); switch (st->chip_info->regmap_type) { + case AD5683_REGMAP: + shift = 13; + ref_bit_msk = AD5683_REF_BIT_MSK; + break; case AD5686_REGMAP: shift = 0; ref_bit_msk = 0; @@ -256,6 +260,29 @@ static const struct ad5686_chip_info ad5686_chip_info_tbl[] = { .num_channels = 8, .regmap_type = AD5686_REGMAP, }, + [ID_AD5681R] = { + .channels = ad5691r_channels, + .int_vref_mv = 2500, + .num_channels = 1, + .regmap_type = AD5683_REGMAP, + }, + [ID_AD5682R] = { + .channels = ad5692r_channels, + .int_vref_mv = 2500, + .num_channels = 1, + .regmap_type = AD5683_REGMAP, + }, + [ID_AD5683] = { + .channels = ad5693_channels, + .num_channels = 1, + .regmap_type = AD5683_REGMAP, + }, + [ID_AD5683R] = { + .channels = ad5693_channels, + .int_vref_mv = 2500, + .num_channels = 1, + .regmap_type = AD5683_REGMAP, + }, [ID_AD5684] = { .channels = ad5684_channels, .num_channels = 4, @@ -385,6 +412,11 @@ int ad5686_probe(struct device *dev, indio_dev->num_channels = st->chip_info->num_channels; switch (st->chip_info->regmap_type) { + case AD5683_REGMAP: + cmd = AD5686_CMD_CONTROL_REG; + ref_bit_msk = AD5683_REF_BIT_MSK; + st->use_internal_vref = !voltage_uv; + break; case AD5686_REGMAP: cmd = AD5686_CMD_INTERNAL_REFER_SETUP; ref_bit_msk = 0; diff --git a/drivers/iio/dac/ad5686.h b/drivers/iio/dac/ad5686.h index 6c6879d..d05cda9 100644 --- a/drivers/iio/dac/ad5686.h +++ b/drivers/iio/dac/ad5686.h @@ -13,6 +13,7 @@ #include #include +#define AD5683_DATA(x) ((x) << 4) #define AD5686_ADDR(x) ((x) << 16) #define AD5686_CMD(x) ((x) << 20) @@ -36,6 +37,8 @@ #define AD5686_LDAC_PWRDN_3STATE 0x3 #define AD5686_CMD_CONTROL_REG 0x4 +#define AD5686_CMD_READBACK_ENABLE_V2 0x5 +#define AD5683_REF_BIT_MSK BIT(12) #define AD5693_REF_BIT_MSK BIT(12) /** @@ -47,6 +50,10 @@ enum ad5686_supported_device_ids { ID_AD5675R, ID_AD5676, ID_AD5676R, + ID_AD5681R, + ID_AD5682R, + ID_AD5683, + ID_AD5683R, ID_AD5684, ID_AD5684R, ID_AD5685R, @@ -64,6 +71,7 @@ enum ad5686_supported_device_ids { }; enum ad5686_regmap_type { + AD5683_REGMAP, AD5686_REGMAP, AD5693_REGMAP };