From patchwork Sat Aug 20 19:01:26 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Rankin X-Patchwork-Id: 277 Return-path: Envelope-to: mchehab@infradead.org Delivery-date: Sat, 20 Aug 2011 19:08:17 +0000 Received: from casper.infradead.org [85.118.1.10] by gaivota with IMAP (fetchmail-6.3.20) for (single-drop); Sat, 20 Aug 2011 18:16:52 -0700 (PDT) Received: from vger.kernel.org ([209.132.180.67]) by casper.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1Ququ1-00066J-Gd; Sat, 20 Aug 2011 19:08:17 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754669Ab1HTTIM (ORCPT + 1 other); Sat, 20 Aug 2011 15:08:12 -0400 Received: from nm31-vm4.bullet.mail.bf1.yahoo.com ([72.30.239.12]:38536 "HELO nm31-vm4.bullet.mail.bf1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1754458Ab1HTTIK (ORCPT ); Sat, 20 Aug 2011 15:08:10 -0400 X-Greylist: delayed 401 seconds by postgrey-1.27 at vger.kernel.org; Sat, 20 Aug 2011 15:08:10 EDT Received: from [98.139.215.142] by nm31.bullet.mail.bf1.yahoo.com with NNFMP; 20 Aug 2011 19:01:29 -0000 Received: from [98.139.212.197] by tm13.bullet.mail.bf1.yahoo.com with NNFMP; 20 Aug 2011 19:01:28 -0000 Received: from [127.0.0.1] by omp1006.mail.bf1.yahoo.com with NNFMP; 20 Aug 2011 19:01:28 -0000 X-Yahoo-Newman-Id: 958833.36887.bm@omp1006.mail.bf1.yahoo.com Received: (qmail 64372 invoked from network); 20 Aug 2011 19:01:28 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=DKIM-Signature:X-Yahoo-Newman-Property:X-YMail-OSG:X-Yahoo-SMTP:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type; b=Xnp3Hltfogxs4r/e0OgnLu+bbQlsFPjKhKHxQ4NimQ65FEQH8zXFu9OB3fJ0I68fu1fCxqDVety+f1e06VKNwNGaKcKjcGISBCsOyYcqRvCwsS2HeusebdMgBG36zyRtbePvJoCs3jGfNtizhwTKzDmlx9/wHYXNy1upUJjtZWU= ; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1313866888; bh=SVJ2g+7FgTIvTA5FShI8oiuuIcJ/AwAVksGJ5AUznVw=; h=X-Yahoo-Newman-Property:X-YMail-OSG:X-Yahoo-SMTP:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type; b=HAgxEqhRCpLZR5NbI4XHHANqkMXM4hCGkOBqcyUMHWWb3gbpEejTuobKUIMgqvH15fNdyoAY4MsYPaEp6vcYM/i+m7D91Nzhn1GM5nKTURI5FFXkfLGyHYDs5WSpduwQjXWObfdWK1yjh26IPSLntVaWG8AvygUjD1gTZhk9Diw= X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: K6ZXhCEVM1mO3zpRaicOR6IAwUgMfuRGMp1OAGaMkHgWfWI 2wQXy5VidjmpAbglY9LCdBdIsYv70E0i1YWqBGqpVJykFs8oYhsGodghPOEB SZI5N2adfyk_Ec0__iOtqcpikibQU0pbSOGOGjpPdGIOSRkuf41JPW3trvEo qikDLS0mK0YuuSI8j8v8D3ExH12NLK4vTLgYRdZ7Lp9UnckkPmVwyOlDKOb0 SvE97nGPDrhYVrwYFWx7Rx9MijwLA_bSBBsphfQQ15QX_dRgXBWiO5nFQdxF e3WEdHTh62xx8zuXE7GYrkfreOu8MB3sxA_yDAUtzsl.hX5uaOV3uXUpd9eb .W8Qez1S0z0BN.vAYmM7g7W.5Te1QSpt5cX9Mx5Qut2dkonGGo2bSV.DAfDl OACrboVdi X-Yahoo-SMTP: _eHyS_GswBDPVvpmS8j1ucSv6i5d Received: from [192.168.2.3] (rankincj@86.16.54.215 with plain) by smtp217.mail.bf1.yahoo.com with SMTP; 20 Aug 2011 12:01:28 -0700 PDT Message-ID: <4E500486.4080009@yahoo.com> Date: Sat, 20 Aug 2011 20:01:26 +0100 From: Chris Rankin User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110621 Fedora/3.1.11-1.fc14 Thunderbird/3.1.11 MIME-Version: 1.0 To: Mauro Carvalho Chehab CC: Devin Heitmueller , linux-media@vger.kernel.org, Antti Palosaari Subject: Re: [PATCH 6/6] EM28xx - don't sleep on disconnect References: <1313847960.1685.YahooMailClassic@web121706.mail.ne1.yahoo.com> <4E4FC2BE.4070409@redhat.com> In-Reply-To: <4E4FC2BE.4070409@redhat.com> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Here's the updated patch that checks whether the frontend exists before disabling the sleep operations. Cheers, Chris --- linux-3.0/drivers/media/common/tuners/tda18271-fe.c.orig 2011-08-20 18:53:48.000000000 +0100 +++ linux-3.0/drivers/media/common/tuners/tda18271-fe.c 2011-08-20 19:21:34.000000000 +0100 @@ -1230,7 +1230,7 @@ return 0; } -static struct dvb_tuner_ops tda18271_tuner_ops = { +static const struct dvb_tuner_ops tda18271_tuner_ops = { .info = { .name = "NXP TDA18271HD", .frequency_min = 45000000, --- linux-3.0/drivers/media/dvb/frontends/cxd2820r_core.c.orig 2011-08-20 18:54:09.000000000 +0100 +++ linux-3.0/drivers/media/dvb/frontends/cxd2820r_core.c 2011-08-20 19:22:21.000000000 +0100 @@ -778,7 +778,7 @@ } EXPORT_SYMBOL(cxd2820r_get_tuner_i2c_adapter); -static struct dvb_frontend_ops cxd2820r_ops[2]; +static const struct dvb_frontend_ops cxd2820r_ops[2]; struct dvb_frontend *cxd2820r_attach(const struct cxd2820r_config *cfg, struct i2c_adapter *i2c, struct dvb_frontend *fe) @@ -844,7 +844,7 @@ } EXPORT_SYMBOL(cxd2820r_attach); -static struct dvb_frontend_ops cxd2820r_ops[2] = { +static const struct dvb_frontend_ops cxd2820r_ops[2] = { { /* DVB-T/T2 */ .info = { --- linux-3.0/drivers/media/video/em28xx/em28xx-dvb.c.orig 2011-08-20 18:53:25.000000000 +0100 +++ linux-3.0/drivers/media/video/em28xx/em28xx-dvb.c 2011-08-20 19:26:51.000000000 +0100 @@ -720,6 +720,13 @@ goto ret; } +static inline void prevent_sleep(struct dvb_frontend_ops *ops) +{ + ops->set_voltage = NULL; + ops->sleep = NULL; + ops->tuner_ops.sleep = NULL; +} + static int dvb_fini(struct em28xx *dev) { if (!dev->board.has_dvb) { @@ -728,8 +735,19 @@ } if (dev->dvb) { - unregister_dvb(dev->dvb); - kfree(dev->dvb); + struct em28xx_dvb *dvb = dev->dvb; + + if (dev->state & DEV_DISCONNECTED) { + /* We cannot tell the device to sleep + * once it has been unplugged. */ + if (dvb->fe[0]) + prevent_sleep(&dvb->fe[0]->ops); + if (dvb->fe[1]) + prevent_sleep(&dvb->fe[1]->ops); + } + + unregister_dvb(dvb); + kfree(dvb); dev->dvb = NULL; }