From patchwork Fri Apr 17 13:56:51 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean Delvare X-Patchwork-Id: 18670 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n3HDtLUW021992 for ; Fri, 17 Apr 2009 13:57:03 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751909AbZDQN5B (ORCPT ); Fri, 17 Apr 2009 09:57:01 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752618AbZDQN5B (ORCPT ); Fri, 17 Apr 2009 09:57:01 -0400 Received: from zone0.gcu-squad.org ([212.85.147.21]:39251 "EHLO services.gcu-squad.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751909AbZDQN5A (ORCPT ); Fri, 17 Apr 2009 09:57:00 -0400 Received: from jdelvare.pck.nerim.net ([62.212.121.182] helo=hyperion.delvare) by services.gcu-squad.org (GCU Mailer Daemon) with esmtpsa id 1Lupe6-0003qk-Ix (TLSv1:AES256-SHA:256) (envelope-from ) ; Fri, 17 Apr 2009 17:06:26 +0200 Date: Fri, 17 Apr 2009 15:56:51 +0200 From: Jean Delvare To: Mauro Carvalho Chehab Cc: Andy Walls , LMML Subject: [PATCH] cx18: Fix the handling of i2c bus registration error Message-ID: <20090417155651.5925badc@hyperion.delvare> X-Mailer: Claws Mail 3.5.0 (GTK+ 2.14.4; x86_64-suse-linux-gnu) Mime-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org * Return actual error values as returned by the i2c subsystem, rather than 0 or 1. * If the registration of the second bus fails, unregister the first one before exiting, otherwise we are leaking resources. Signed-off-by: Jean Delvare Cc: Hans Verkuil Acked-by: Andy Walls --- Mauro, can you please apply this fix now? linux/drivers/media/video/cx18/cx18-i2c.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) --- v4l-dvb.orig/linux/drivers/media/video/cx18/cx18-i2c.c 2009-03-01 16:09:09.000000000 +0100 +++ v4l-dvb/linux/drivers/media/video/cx18/cx18-i2c.c 2009-04-03 18:45:18.000000000 +0200 @@ -214,7 +214,7 @@ static struct i2c_algo_bit_data cx18_i2c /* init + register i2c algo-bit adapter */ int init_cx18_i2c(struct cx18 *cx) { - int i; + int i, err; CX18_DEBUG_I2C("i2c init\n"); for (i = 0; i < 2; i++) { @@ -273,8 +273,18 @@ int init_cx18_i2c(struct cx18 *cx) cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL, core, reset, (u32) CX18_GPIO_RESET_I2C); - return i2c_bit_add_bus(&cx->i2c_adap[0]) || - i2c_bit_add_bus(&cx->i2c_adap[1]); + err = i2c_bit_add_bus(&cx->i2c_adap[0]); + if (err) + goto err; + err = i2c_bit_add_bus(&cx->i2c_adap[1]); + if (err) + goto err_del_bus_0; + return 0; + + err_del_bus_0: + i2c_del_adapter(&cx->i2c_adap[0]); + err: + return err; } void exit_cx18_i2c(struct cx18 *cx)