From patchwork Sat Apr 13 09:48:41 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Frank_Sch=C3=A4fer?= X-Patchwork-Id: 2440161 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 85777DFB79 for ; Sat, 13 Apr 2013 09:47:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752649Ab3DMJrv (ORCPT ); Sat, 13 Apr 2013 05:47:51 -0400 Received: from mail-ee0-f50.google.com ([74.125.83.50]:34515 "EHLO mail-ee0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752690Ab3DMJrn (ORCPT ); Sat, 13 Apr 2013 05:47:43 -0400 Received: by mail-ee0-f50.google.com with SMTP id e53so1623665eek.9 for ; Sat, 13 Apr 2013 02:47:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:mime-version:content-type:content-transfer-encoding; bh=uD7VMf8pOrM5yXqb1eQDQOkBuXbBEnJAcBmFhtX6hg4=; b=CbmEj8cNdMZTMHddLWf0EiM4CG4otqfCzAwJS5qW+2sGSiaIfYrM906PBAOGTsmvNf eJFYR0rpNm7bYnTty60XNy/QfmAo+kg1EVMttnMZumpCReWLbLzvGbsOw6KkKMBxZU7R B94sjvi37/D0THrtVTvZuJ73bFLrglxhl9YcgZIlUMWm/kyQjWscL/gku4nWNlcJ1P1s 3TGpyE2mBRQ4BcIGo1zWbt/ZPT3It1u7LMeV+3w9SQwUwyS5oaddX8lEVcxEKghWbeQ7 FPuYZyzcEINNCYBCExYAXxd5kJ0wX7HyPtr4tJ1Qc8hmgwEMmrYExRRXiyd65Tk7phWj LeEg== X-Received: by 10.15.32.142 with SMTP id a14mr37856453eev.22.1365846462603; Sat, 13 Apr 2013 02:47:42 -0700 (PDT) Received: from Athlon64X2-5000.site (ip-109-90-247-142.unitymediagroup.de. [109.90.247.142]) by mx.google.com with ESMTPS id a2sm14060659eem.11.2013.04.13.02.47.41 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 13 Apr 2013 02:47:42 -0700 (PDT) From: =?UTF-8?q?Frank=20Sch=C3=A4fer?= To: mchehab@redhat.com Cc: linux-media@vger.kernel.org, =?UTF-8?q?Frank=20Sch=C3=A4fer?= Subject: [PATCH 3/3] em28xx: add helper function for handling the GPIO registers of newer devices Date: Sat, 13 Apr 2013 11:48:41 +0200 Message-Id: <1365846521-3127-4-git-send-email-fschaefer.oss@googlemail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1365846521-3127-1-git-send-email-fschaefer.oss@googlemail.com> References: <1365846521-3127-1-git-send-email-fschaefer.oss@googlemail.com> MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org The current code provides a helper function em28xx_write_reg_bits() that reads the current state/value of a GPIO register, modifies only the bits specified with the value and bitmask parmaters and writes the new value back to the register. Newer devices (em25xx, em276x/7x/8x) are using separate registers for reading and changing the states of the GPIO ports/lines, for which this helper function cannot be used. Introduce a new function em28xx_write_regs_bits() that uses two register parameters reg_r (register for reading the current value) and reg_w (register for writing the new value). Make em28xx_write_reg_bits() a wrapper function calling this new function with the same value for both registers. Signed-off-by: Frank Schäfer --- drivers/media/usb/em28xx/em28xx-core.c | 26 +++++++++++++++++++------- drivers/media/usb/em28xx/em28xx.h | 5 +++-- 2 Dateien geändert, 22 Zeilen hinzugefügt(+), 9 Zeilen entfernt(-) diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c index fc157af..293dc31 100644 --- a/drivers/media/usb/em28xx/em28xx-core.c +++ b/drivers/media/usb/em28xx/em28xx-core.c @@ -205,23 +205,35 @@ int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val) EXPORT_SYMBOL_GPL(em28xx_write_reg); /* - * em28xx_write_reg_bits() - * sets only some bits (specified by bitmask) of a register, by first reading - * the actual value + * em28xx_write_regs_bits() + * reads value from a register, modifies only the bits specified with the value + * and bitmask parameters and writes the new value two a second register. */ -int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val, - u8 bitmask) +int em28xx_write_regs_bits(struct em28xx *dev, u16 reg_r, u16 reg_w, u8 val, + u8 bitmask) { int oldval; u8 newval; - oldval = em28xx_read_reg(dev, reg); + oldval = em28xx_read_reg(dev, reg_r); if (oldval < 0) return oldval; newval = (((u8) oldval) & ~bitmask) | (val & bitmask); - return em28xx_write_regs(dev, reg, &newval, 1); + return em28xx_write_regs(dev, reg_w, &newval, 1); +} +EXPORT_SYMBOL_GPL(em28xx_write_regs_bits); + +/* + * em28xx_write_reg_bits() + * modifies only the bits specified with the value and bitmask parameters of + * a register + */ +int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val, + u8 bitmask) +{ + return em28xx_write_regs_bits(dev, reg, reg, val, bitmask); } EXPORT_SYMBOL_GPL(em28xx_write_reg_bits); diff --git a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h index e070de0..a817c3d 100644 --- a/drivers/media/usb/em28xx/em28xx.h +++ b/drivers/media/usb/em28xx/em28xx.h @@ -667,8 +667,9 @@ int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf, int len); int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len); int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val); -int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val, - u8 bitmask); +int em28xx_write_regs_bits(struct em28xx *dev, u16 reg_r, u16 reg_w, + u8 val, u8 bitmask); +int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val, u8 bitmask); int em28xx_read_ac97(struct em28xx *dev, u8 reg); int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val);