From patchwork Sat Jun 11 17:46:47 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Corbet X-Patchwork-Id: 872022 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.4) with ESMTP id p5BHlKuO008374 for ; Sat, 11 Jun 2011 17:47:22 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751254Ab1FKRrP (ORCPT ); Sat, 11 Jun 2011 13:47:15 -0400 Received: from tex.lwn.net ([70.33.254.29]:54692 "EHLO vena.lwn.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752237Ab1FKRrG (ORCPT ); Sat, 11 Jun 2011 13:47:06 -0400 Received: from localhost.localdomain (c-71-196-136-137.hsd1.co.comcast.net [71.196.136.137]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by vena.lwn.net (Postfix) with ESMTP id 343E41540052; Sat, 11 Jun 2011 11:47:06 -0600 (MDT) From: Jonathan Corbet To: linux-media@vger.kernel.org Cc: g.liakhovetski@gmx.de, Kassey Lee , Mauro Carvalho Chehab , Jonathan Corbet Subject: [PATCH 6/8] marvell-cam: Right-shift i2c slave ID's in the cafe driver Date: Sat, 11 Jun 2011 11:46:47 -0600 Message-Id: <1307814409-46282-7-git-send-email-corbet@lwn.net> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1307814409-46282-1-git-send-email-corbet@lwn.net> References: <1307814409-46282-1-git-send-email-corbet@lwn.net> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Sat, 11 Jun 2011 17:47:22 +0000 (UTC) This makes the cafe i2c implement consistent with the rest of Linux so that the core can use the same slave ID everywhere. Signed-off-by: Jonathan Corbet --- drivers/media/video/marvell-ccic/cafe-driver.c | 9 ++++++++- drivers/media/video/marvell-ccic/mcam-core.c | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/media/video/marvell-ccic/cafe-driver.c b/drivers/media/video/marvell-ccic/cafe-driver.c index 1027265..3dbc7e5 100644 --- a/drivers/media/video/marvell-ccic/cafe-driver.c +++ b/drivers/media/video/marvell-ccic/cafe-driver.c @@ -84,7 +84,14 @@ struct cafe_camera { #define TWSIC0_EN 0x00000001 /* TWSI enable */ #define TWSIC0_MODE 0x00000002 /* 1 = 16-bit, 0 = 8-bit */ #define TWSIC0_SID 0x000003fc /* Slave ID */ -#define TWSIC0_SID_SHIFT 2 +/* + * Subtle trickery: the slave ID field starts with bit 2. But the + * Linux i2c stack wants to treat the bottommost bit as a separate + * read/write bit, which is why slave ID's are usually presented + * >>1. For consistency with that behavior, we shift over three + * bits instead of two. + */ +#define TWSIC0_SID_SHIFT 3 #define TWSIC0_CLKDIV 0x0007fc00 /* Clock divider */ #define TWSIC0_MASKACK 0x00400000 /* Mask ack from sensor */ #define TWSIC0_OVMAGIC 0x00800000 /* Make it work on OV sensors */ diff --git a/drivers/media/video/marvell-ccic/mcam-core.c b/drivers/media/video/marvell-ccic/mcam-core.c index 0d60234..d5f18a3 100644 --- a/drivers/media/video/marvell-ccic/mcam-core.c +++ b/drivers/media/video/marvell-ccic/mcam-core.c @@ -1549,7 +1549,7 @@ int mccic_register(struct mcam_camera *cam) { struct i2c_board_info ov7670_info = { .type = "ov7670", - .addr = 0x42, + .addr = 0x42 >> 1, .platform_data = &sensor_cfg, }; int ret;