From patchwork Thu Nov 8 20:36:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Walker X-Patchwork-Id: 10675003 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 80F1D15E9 for ; Thu, 8 Nov 2018 20:38:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 73BDF2E43F for ; Thu, 8 Nov 2018 20:38:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 67D152E4E0; Thu, 8 Nov 2018 20:38:26 +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.7 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham 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 B209D2E43F for ; Thu, 8 Nov 2018 20:38:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727076AbeKIGPe (ORCPT ); Fri, 9 Nov 2018 01:15:34 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:45212 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725922AbeKIGPe (ORCPT ); Fri, 9 Nov 2018 01:15:34 -0500 Received: by mail-qk1-f194.google.com with SMTP id d135so28892008qkc.12; Thu, 08 Nov 2018 12:38:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=VyMyFFsWjC5CxdJRh55nWQzferucC4h20nm8bws236Q=; b=QmlBrO8DWj8apuYIbzBrRjLY7P3rQQWnGaUuMzKu2ZuF36XyzltHxIdhwNz8eV665P yFN4oZs9PUZ8pTQyFx5PJK4mDfNGajQKXmHiiNK27Rr6F4NXjdrvBqOOhZvxCMKJnGhg Nz7q/MJul3F6fMmJBwjUBsOf3YwyDvo5yQqwnPDAWmvWYYf7GXCHNrkM0SGUChVnxd5F AOWFqs/0yM1Rk6lUTTOxgVqe0PZh7x8NXGhhhesK2QRpDbm801qhv78cbNV6CMbSSYYo Ip/3wUlBSJf6Gk1pTIqPlNnx0+QC+CYxk4ZEtooL728/77iZNDZDic+G23M9BKVyC0fJ PWDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=VyMyFFsWjC5CxdJRh55nWQzferucC4h20nm8bws236Q=; b=LZ5REo4R2JZ9//IZtFveD8PfSzbaTlQfntzwaFVlRq49VmgtULMfVKQVlzg54kVj1M dOemHURaGoKAoUNix9b4zmY5CYFDOT3G3PKF25dXpX1N3C7PgJ0sSFowZ63A7XBlDwB+ KlDwpKK5ZNO0r/jSC46wiW+2/vifBoUVPGvsgoFEvQBcL973rJ51QdfK7e3x/PREWTYH qZqzGG2DSVsifGSXqyimvDk5OEopBK0f7s/62lmSSGHlAUycTsIh56+SEp4YgSdmzjBf qrv/vMEF+kutrKx1pywnziaMCsZvviFo+bwa5/aalcMhjXWbmHBz+ltjtYh1WLWmMZMv /fqA== X-Gm-Message-State: AGRZ1gIVoy7Ho/4kl603QZOVNM4cEyrgkHWfUpejxRMGJOsgnALw1qV0 pb5QXtzIQ2srSV/u85G0xmCIvvi13lA= X-Google-Smtp-Source: AJdET5fawRSZ71179nQMIT08TkdNu3kzL1BItMNw36Qaf9TpISknV1C9BkuqmzG9o3dyZ5E6zRtUDQ== X-Received: by 2002:aed:2c47:: with SMTP id f65mr6004727qtd.340.1541709503751; Thu, 08 Nov 2018 12:38:23 -0800 (PST) Received: from avalerion.lan (va-67-233-64-2.dhcp.embarqhsd.net. [67.233.64.2]) by smtp.googlemail.com with ESMTPSA id c194sm2616326qke.0.2018.11.08.12.37.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Nov 2018 12:38:01 -0800 (PST) From: Matt Walker Cc: Matt Walker , Jonathan Cameron , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald-Stadler , Marcus Folkesson , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] IIO: extend dac/MCP4922 to MCP49x1 devices Date: Thu, 8 Nov 2018 15:36:53 -0500 Message-Id: <20181108203655.17448-1-mattofak@gmail.com> X-Mailer: git-send-email 2.17.1 To: unlisted-recipients:; (no To-header on input) 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 Extend the existing dual channel MCP4922 DAC driver to single channel MCP49x1 devices. These devices are simple and write only. The most significant bit of the transfer dictates what channel to write to. Although there is no danger in writing to the non existant channel in the single channel devices, it's better to not register it at all. Therefore extend the driver to know how many channels a device has at probe time based on the ID table. Signed-off-by: Matt Walker --- drivers/iio/dac/mcp4922.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/iio/dac/mcp4922.c b/drivers/iio/dac/mcp4922.c index b5190d1dae8e..094f7dd560ca 100644 --- a/drivers/iio/dac/mcp4922.c +++ b/drivers/iio/dac/mcp4922.c @@ -29,8 +29,11 @@ #define MCP4922_NUM_CHANNELS 2 enum mcp4922_supported_device_ids { + ID_MCP4901, ID_MCP4902, + ID_MCP4911, ID_MCP4912, + ID_MCP4921, ID_MCP4922, }; @@ -115,10 +118,22 @@ static int mcp4922_write_raw(struct iio_dev *indio_dev, } } -static const struct iio_chan_spec mcp4922_channels[3][MCP4922_NUM_CHANNELS] = { - [ID_MCP4902] = { MCP4922_CHAN(0, 8), MCP4922_CHAN(1, 8) }, - [ID_MCP4912] = { MCP4922_CHAN(0, 10), MCP4922_CHAN(1, 10) }, - [ID_MCP4922] = { MCP4922_CHAN(0, 12), MCP4922_CHAN(1, 12) }, +static const unsigned int mcp4922_channel_counts[6] = { + [ID_MCP4901] = 1, + [ID_MCP4902] = 2, + [ID_MCP4911] = 1, + [ID_MCP4912] = 2, + [ID_MCP4921] = 1, + [ID_MCP4922] = 2, +}; + +static const struct iio_chan_spec mcp4922_channels[6][MCP4922_NUM_CHANNELS] = { + [ID_MCP4901] = { MCP4922_CHAN(0, 8), {} }, + [ID_MCP4902] = { MCP4922_CHAN(0, 8), MCP4922_CHAN(1, 8) }, + [ID_MCP4911] = { MCP4922_CHAN(0, 10), {} }, + [ID_MCP4912] = { MCP4922_CHAN(0, 10), MCP4922_CHAN(1, 10) }, + [ID_MCP4921] = { MCP4922_CHAN(0, 12), {} }, + [ID_MCP4922] = { MCP4922_CHAN(0, 12), MCP4922_CHAN(1, 12) }, }; static const struct iio_info mcp4922_info = { @@ -166,7 +181,7 @@ static int mcp4922_probe(struct spi_device *spi) indio_dev->info = &mcp4922_info; indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->channels = mcp4922_channels[id->driver_data]; - indio_dev->num_channels = MCP4922_NUM_CHANNELS; + indio_dev->num_channels = mcp4922_channel_counts[id->driver_data]; indio_dev->name = id->name; ret = iio_device_register(indio_dev); @@ -197,8 +212,11 @@ static int mcp4922_remove(struct spi_device *spi) } static const struct spi_device_id mcp4922_id[] = { + {"mcp4901", ID_MCP4901}, {"mcp4902", ID_MCP4902}, + {"mcp4911", ID_MCP4911}, {"mcp4912", ID_MCP4912}, + {"mcp4921", ID_MCP4921}, {"mcp4922", ID_MCP4922}, {} }; @@ -215,5 +233,5 @@ static struct spi_driver mcp4922_driver = { module_spi_driver(mcp4922_driver); MODULE_AUTHOR("Michael Welling "); -MODULE_DESCRIPTION("Microchip MCP4902, MCP4912, MCP4922 DAC"); +MODULE_DESCRIPTION("Microchip MCP49xx DAC"); MODULE_LICENSE("GPL v2");