Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp701061ybz; Fri, 1 May 2020 07:03:57 -0700 (PDT) X-Google-Smtp-Source: APiQypKF3rzb8t7w9HkjbSaGwH08smMPbAVyBcgHzGdmmARb8fvCzmNtpF9uPCjk6ZPC0RvHJFbK X-Received: by 2002:a17:906:d926:: with SMTP id rn6mr3196783ejb.169.1588341837249; Fri, 01 May 2020 07:03:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588341837; cv=none; d=google.com; s=arc-20160816; b=CiMJa16g5IBqOiQ3QjSCAdFrJsR+LDcNpLo22Y/obuAo0Fab5n5YmUiCf9ZUVltA5b psN7Yl/WQCNtmxxeXqj8fW0/vISg2GoLshx2ZVQ9b+oe/6lXOP0x/XGcVeYvJXy82QKW 8P4dIbvMM9x35vQj1z3+ivoBiBT5KcLvjHvhDH2YufhQWaftoDTAw5fWcozDrxgSGnRt MsOrDlZ3erbIA4g82AapUxarJsGbyYllLJax4Tr85H77c9WRo2AF+Bc9uuzY0mu0/aQV juU+ARCcZVS9qZxT0XSFzmA69jjhu3jIuMRBVw12LNIr8pkdjO9pz07phyZH71TZdvHz Jqiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Ta9nzvkgfwBIf41RwNhGPkhGbi8jlWdeHus8n0Q4K4U=; b=hYcu2s+2llbTHydA7DPOn1TpZvEOnBvvmSw+C8HcN5ud/+rM4Zba0n2/In8qjPM8V4 w6Ny6NRkeil8+GEf7uGFmQPF2H4kztt7BKAYh45nDSBfmwsVdV8q9/08k7WPokQ5luB1 z2jTGg+f4AkV69ljtJO2/9+11b0DfE4jJGcYwgj09EzLTlClwXGTW7jtLZhhGzcULT73 pLyL7h4U9l8j9WrGO3fXECPEsrboVq8mZAi0iHeZH6KPzf/gKQqWOE+2IPkAFHtPKgA4 Lc0fhcQtoPylltmuAGL5Yj1XP4LXzgDaS40V6Z7kQD05KJtXBlSS+VbdH3U3UG0L9IOq oyaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WvCIrqsf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w2si1589394edx.70.2020.05.01.07.03.29; Fri, 01 May 2020 07:03:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WvCIrqsf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729880AbgEAN6v (ORCPT + 99 others); Fri, 1 May 2020 09:58:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:53800 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729848AbgEANaB (ORCPT ); Fri, 1 May 2020 09:30:01 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E710F208DB; Fri, 1 May 2020 13:29:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588339800; bh=VsYap1cvGow2jSCcWvjNno49atcuMeOuC56eocJemgs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WvCIrqsfZu8qMHxmW4T5+hCvr4eOIoFup0VkiGIy4vzda1loqQs07gzAOxOTpeGJZ Ux/VeUtt1VdhCZYV108nhgWrmoBlhSuJ/s6tX6Gf3W4Q9EVUYgWILPuuuN2y925Ifc yBGA/SKuoq467JBov0RwTJAJcDocYg1+tTAjsH24= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ian Abbott Subject: [PATCH 4.9 52/80] staging: comedi: dt2815: fix writing hi byte of analog output Date: Fri, 1 May 2020 15:21:46 +0200 Message-Id: <20200501131529.726360587@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200501131513.810761598@linuxfoundation.org> References: <20200501131513.810761598@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ian Abbott commit ed87d33ddbcd9a1c3b5ae87995da34e6f51a862c upstream. The DT2815 analog output command is 16 bits wide, consisting of the 12-bit sample value in bits 15 to 4, the channel number in bits 3 to 1, and a voltage or current selector in bit 0. Both bytes of the 16-bit command need to be written in turn to a single 8-bit data register. However, the driver currently only writes the low 8-bits. It is broken and appears to have always been broken. Electronic copies of the DT2815 User's Manual seem impossible to find online, but looking at the source code, a best guess for the sequence the driver intended to use to write the analog output command is as follows: 1. Wait for the status register to read 0x00. 2. Write the low byte of the command to the data register. 3. Wait for the status register to read 0x80. 4. Write the high byte of the command to the data register. Step 4 is missing from the driver. Add step 4 to (hopefully) fix the driver. Also add a "FIXME" comment about setting bit 0 of the low byte of the command. Supposedly, it is used to choose between voltage output and current output, but the current driver always sets it to 1. Signed-off-by: Ian Abbott Cc: stable Link: https://lore.kernel.org/r/20200406142015.126982-1-abbotti@mev.co.uk Signed-off-by: Greg Kroah-Hartman Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/dt2815.c | 3 +++ 1 file changed, 3 insertions(+) --- a/drivers/staging/comedi/drivers/dt2815.c +++ b/drivers/staging/comedi/drivers/dt2815.c @@ -101,6 +101,7 @@ static int dt2815_ao_insn(struct comedi_ int ret; for (i = 0; i < insn->n; i++) { + /* FIXME: lo bit 0 chooses voltage output or current output */ lo = ((data[i] & 0x0f) << 4) | (chan << 1) | 0x01; hi = (data[i] & 0xff0) >> 4; @@ -114,6 +115,8 @@ static int dt2815_ao_insn(struct comedi_ if (ret) return ret; + outb(hi, dev->iobase + DT2815_DATA); + devpriv->ao_readback[chan] = data[i]; } return i;