From patchwork Tue Aug 7 02:47:10 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Devin Heitmueller X-Patchwork-Id: 13648 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1SyZqH-00073S-OB for patchwork@linuxtv.org; Tue, 07 Aug 2012 04:48:21 +0200 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.75/mailfrontend-2) with esmtp for id 1SyZqH-0005Pb-Gi; Tue, 07 Aug 2012 04:48:21 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932581Ab2HGCsJ (ORCPT ); Mon, 6 Aug 2012 22:48:09 -0400 Received: from mail-vc0-f174.google.com ([209.85.220.174]:32810 "EHLO mail-vc0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932566Ab2HGCsH (ORCPT ); Mon, 6 Aug 2012 22:48:07 -0400 Received: by mail-vc0-f174.google.com with SMTP id fk26so3432645vcb.19 for ; Mon, 06 Aug 2012 19:48:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=TVdUeDFFi1DFYzSSh3nnYU7Zy3iuwVPc1V/6mtzw/pw=; b=SB7kBvN5guCaz6IWuTnRLYkfZ3nwB1nEDBN8wo0uY3k8eFQTFN1axyKbc64s/bkPj0 nQ7Z07Qgyw/tERfcluLYGWrEZhAfg0hL1zpwSNMpcTUb7Lh7GcyLgFfKaopTjlNr2PFo /2MFgv22NOwEjcwYAqNkQ1GYr1u9VrEQnkegf2cYTk9VqBEuq1Q5CuSnrSR7zPU3428y PnguMn7nRUJ2lpSLGADmTAEI013hLUsszQRugjIHb3TWNl8kCoWcMdpEy6Z/NPGRd08I TsCf+IgzFAEfKcpKgYTMGIopIPkq884bFVBHBQouIEehvEEDLAiFGEm233GNIGXJJffE bjAg== Received: by 10.52.97.41 with SMTP id dx9mr8391607vdb.89.1344307687121; Mon, 06 Aug 2012 19:48:07 -0700 (PDT) Received: from localhost.localdomain (pool-108-54-72-165.nycmny.fios.verizon.net. [108.54.72.165]) by mx.google.com with ESMTPS id e9sm17555638vdf.21.2012.08.06.19.48.06 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 06 Aug 2012 19:48:06 -0700 (PDT) From: Devin Heitmueller To: linux-media@vger.kernel.org Cc: Devin Heitmueller Subject: [PATCH 20/24] au0828: tweak workaround for i2c clock stretching bug Date: Mon, 6 Aug 2012 22:47:10 -0400 Message-Id: <1344307634-11673-21-git-send-email-dheitmueller@kernellabs.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1344307634-11673-1-git-send-email-dheitmueller@kernellabs.com> References: <1344307634-11673-1-git-send-email-dheitmueller@kernellabs.com> X-Gm-Message-State: ALoCoQkO0pG7ZsK9zkxAEixgfyHvWT8qGYZl5r8QSJ69LNx4NPnurDiI1BMyzqHyUPMhXNIPBi23 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 5.6.1.2065439, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2012.8.7.23921 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' HTML_00_01 0.05, HTML_00_10 0.05, BODYTEXTP_SIZE_3000_LESS 0, BODY_SIZE_2000_2999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, DATE_TZ_NA 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_MEDIA_BODY 0, __CP_URI_IN_BODY 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __MIME_TEXT_ONLY 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_WWW 0, __URI_NS ' The hack I put in a couple of years ago to avoid clock stretching issues when talking to the xc5000 worked fine for writes, but intermittently fails for register reads, because the xc5000 may stretch the clock for longer between bytes (I was seeing cases of 21 us on the analyzer). The problem manifested itself as the xc5000 firmware version and PLL lock register intermittently showing garbage values. Slow down the i2c bus from 30 KHz to 20 KHz to accommodate. Signed-off-by: Devin Heitmueller --- drivers/media/video/au0828/au0828-cards.c | 4 ++-- drivers/media/video/au0828/au0828-reg.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/media/video/au0828/au0828-cards.c b/drivers/media/video/au0828/au0828-cards.c index 1c6015a..4a09b0e 100644 --- a/drivers/media/video/au0828/au0828-cards.c +++ b/drivers/media/video/au0828/au0828-cards.c @@ -46,7 +46,7 @@ struct au0828_board au0828_boards[] = { .name = "Hauppauge HVR850", .tuner_type = TUNER_XC5000, .tuner_addr = 0x61, - .i2c_clk_divider = AU0828_I2C_CLK_30KHZ, + .i2c_clk_divider = AU0828_I2C_CLK_20KHZ, .input = { { .type = AU0828_VMUX_TELEVISION, @@ -77,7 +77,7 @@ struct au0828_board au0828_boards[] = { stretch fits inside of a normal clock cycle, or else the au0828 fails to set the STOP bit. A 30 KHz clock puts the clock pulse width at 18us */ - .i2c_clk_divider = AU0828_I2C_CLK_30KHZ, + .i2c_clk_divider = AU0828_I2C_CLK_20KHZ, .input = { { .type = AU0828_VMUX_TELEVISION, diff --git a/drivers/media/video/au0828/au0828-reg.h b/drivers/media/video/au0828/au0828-reg.h index c39f3d2..2140f4c 100644 --- a/drivers/media/video/au0828/au0828-reg.h +++ b/drivers/media/video/au0828/au0828-reg.h @@ -63,3 +63,4 @@ #define AU0828_I2C_CLK_250KHZ 0x07 #define AU0828_I2C_CLK_100KHZ 0x14 #define AU0828_I2C_CLK_30KHZ 0x40 +#define AU0828_I2C_CLK_20KHZ 0x60