From patchwork Mon Aug 8 19:30:40 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Jarzmik X-Patchwork-Id: 9269519 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 672A360839 for ; Mon, 8 Aug 2016 19:32:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 58AEB212D8 for ; Mon, 8 Aug 2016 19:32:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4D64127FBB; Mon, 8 Aug 2016 19:32:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 48C99212D8 for ; Mon, 8 Aug 2016 19:32:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932477AbcHHTb3 (ORCPT ); Mon, 8 Aug 2016 15:31:29 -0400 Received: from smtp06.smtpout.orange.fr ([80.12.242.128]:46726 "EHLO smtp.smtpout.orange.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932105AbcHHTbW (ORCPT ); Mon, 8 Aug 2016 15:31:22 -0400 Received: from belgarion.home ([109.220.218.149]) by mwinf5d12 with ME id UjXJ1t0053DzaaM03jXLpu; Mon, 08 Aug 2016 21:31:20 +0200 X-ME-Helo: belgarion.home X-ME-Date: Mon, 08 Aug 2016 21:31:20 +0200 X-ME-IP: 109.220.218.149 From: Robert Jarzmik To: Mauro Carvalho Chehab , Guennadi Liakhovetski , Jiri Kosina , Hans Verkuil Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Robert Jarzmik Subject: [PATCH v3 02/14] media: mt9m111: prevent module removal while in use Date: Mon, 8 Aug 2016 21:30:40 +0200 Message-Id: <1470684652-16295-3-git-send-email-robert.jarzmik@free.fr> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1470684652-16295-1-git-send-email-robert.jarzmik@free.fr> References: <1470684652-16295-1-git-send-email-robert.jarzmik@free.fr> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The mt9m111 can be a removable module : the only case where the module should be kept loaded is while it is used, ie. while an active transation is ongoing on it. The notion of active transaction is mapped on the power state of the module : if powered on the removal is prohibited. Signed-off-by: Robert Jarzmik --- drivers/media/i2c/soc_camera/mt9m111.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/soc_camera/mt9m111.c b/drivers/media/i2c/soc_camera/mt9m111.c index a7efaa5964d1..ea5b5e709402 100644 --- a/drivers/media/i2c/soc_camera/mt9m111.c +++ b/drivers/media/i2c/soc_camera/mt9m111.c @@ -780,23 +780,33 @@ static int mt9m111_power_on(struct mt9m111 *mt9m111) struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev); int ret; + if (!try_module_get(THIS_MODULE)) + return -ENXIO; + ret = v4l2_clk_enable(mt9m111->clk); if (ret < 0) - return ret; + goto out_module_put; ret = mt9m111_resume(mt9m111); if (ret < 0) { dev_err(&client->dev, "Failed to resume the sensor: %d\n", ret); - v4l2_clk_disable(mt9m111->clk); + goto out_clk_disable; } return ret; + +out_clk_disable: + v4l2_clk_disable(mt9m111->clk); +out_module_put: + module_put(THIS_MODULE); + return ret; } static void mt9m111_power_off(struct mt9m111 *mt9m111) { mt9m111_suspend(mt9m111); v4l2_clk_disable(mt9m111->clk); + module_put(THIS_MODULE); } static int mt9m111_s_power(struct v4l2_subdev *sd, int on)