Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754246Ab3JDMKL (ORCPT ); Fri, 4 Oct 2013 08:10:11 -0400 Received: from smtp-out-245.synserver.de ([212.40.185.245]:1131 "EHLO smtp-out-240.synserver.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751400Ab3JDMKJ (ORCPT ); Fri, 4 Oct 2013 08:10:09 -0400 X-SynServer-TrustedSrc: 1 X-SynServer-AuthUser: lars@metafoo.de X-SynServer-PPID: 9362 Message-ID: <524EB090.2070708@metafoo.de> Date: Fri, 04 Oct 2013 14:12:00 +0200 From: Lars-Peter Clausen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130922 Icedove/17.0.9 MIME-Version: 1.0 To: Wolfram Sang CC: Michal Simek , Michal Simek , linux-kernel@vger.kernel.org, Kedareswara rao Appana , Kedareswara rao Appana , Jean Delvare , Peter Korsgaard , linux-i2c@vger.kernel.org, =?ISO-8859-1?Q?Richard_R=F6jfors?= , "Steven A. Falco" Subject: Re: [PATCH v2 2/3] i2c: xilinx: Set tx direction in write operation References: <57a4f5352ce6f03bde7aafe8b880f91b52994379.1380550490.git.michal.simek@xilinx.com> <20131004054636.GC3194@katana> <524E902D.8030809@monstr.eu> <20131004115517.GA2994@katana> In-Reply-To: <20131004115517.GA2994@katana> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2333 Lines: 59 On 10/04/2013 01:55 PM, Wolfram Sang wrote: > On Fri, Oct 04, 2013 at 11:53:49AM +0200, Michal Simek wrote: >> On 10/04/2013 07:46 AM, Wolfram Sang wrote: >>> >>>> + cr = xiic_getreg32(i2c, XIIC_CR_REG_OFFSET); >>>> + cr |= XIIC_CR_DIR_IS_TX_MASK; >>>> + xiic_setreg32(i2c, XIIC_CR_REG_OFFSET, cr); >>>> + >>> >>> Is there no need to clear the bit again when receiving? >> >> This bit is cleared in xiic_xfer() -> xiic_start_xfer() ->xiic_reinit() >> >> xiic_setreg8(i2c, XIIC_CR_REG_OFFSET, XIIC_CR_TX_FIFO_RESET_MASK); > > A bit implicit, but OK. > >>> And did >>> transferring ever work if this bit was never set before? >> >> I really don't know. We have switched from old driver to this new mainline one >> and based on our eeprom testing we have found that this bit hasn't been setup properly. >> >> It is described here. >> http://www.xilinx.com/support/documentation/ip_documentation/axi_iic/v1_02_a/axi_iic_ds756.pdf >> page 28 - step 3. >> >> IIC Master Transmitter with a Repeated Start >> 1. Write the IIC device address to the TX_FIFO. >> 2. Write data to TX_FIFO. >> 3. Write to Control Register (CR) to set MSMS = 1 and TX = 1. >> 4. Continue writing data to TX_FIFO. >> 5. Wait for transmit FIFO empty interrupt. This implies the IIC has throttled the bus. >> 6. Write to CR to set RSTA = 1. > > Repeated start is not happening in the driver as well, or am I > overlooking something? > >> 7. Write IIC device address to TX_FIFO. >> 8. Write all data except last byte to TX_FIFO. >> 9. Wait for transmit FIFO empty interrupt. This implies the IIC has throttled the bus. >> 10. Write to CR to set MSMS = 0. The IIC generates a stop condition at the end of the last byte. >> 11. Write last byte of data to TX_FIFO. > > CCing more people who worked on the driver in the past and might have > experiences The current version works fine here. The driver uses whats described in the datasheet as "dynamic controller logic flow" and not the "standard controller logic flow". The sequence Michal mentioned above is from the "standard controller logic flow" section. - Lars -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/