From patchwork Thu May 30 09:34:28 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 2634321 Return-Path: X-Original-To: patchwork-linux-fbdev@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 CBBA8DF2A1 for ; Thu, 30 May 2013 09:35:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030315Ab3E3Jfd (ORCPT ); Thu, 30 May 2013 05:35:33 -0400 Received: from comal.ext.ti.com ([198.47.26.152]:37433 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030302Ab3E3Jfb (ORCPT ); Thu, 30 May 2013 05:35:31 -0400 Received: from dlelxv90.itg.ti.com ([172.17.2.17]) by comal.ext.ti.com (8.13.7/8.13.7) with ESMTP id r4U9ZUpG027333; Thu, 30 May 2013 04:35:30 -0500 Received: from DLEE71.ent.ti.com (dlee71.ent.ti.com [157.170.170.114]) by dlelxv90.itg.ti.com (8.14.3/8.13.8) with ESMTP id r4U9ZUae005454; Thu, 30 May 2013 04:35:30 -0500 Received: from dlelxv22.itg.ti.com (172.17.1.197) by DLEE71.ent.ti.com (157.170.170.114) with Microsoft SMTP Server id 14.2.342.3; Thu, 30 May 2013 04:35:30 -0500 Received: from deskari.tieu.ti.com (h64-9.vpn.ti.com [172.24.64.9]) by dlelxv22.itg.ti.com (8.13.8/8.13.8) with ESMTP id r4U9ZJ1f002669; Thu, 30 May 2013 04:35:29 -0500 From: Tomi Valkeinen To: , , Archit Taneja CC: Tomi Valkeinen Subject: [PATCH 07/32] OMAPDSS: SDI: fix regulators for DT Date: Thu, 30 May 2013 12:34:28 +0300 Message-ID: <1369906493-27538-8-git-send-email-tomi.valkeinen@ti.com> X-Mailer: git-send-email 1.8.1.2 In-Reply-To: <1369906493-27538-1-git-send-email-tomi.valkeinen@ti.com> References: <1369906493-27538-1-git-send-email-tomi.valkeinen@ti.com> MIME-Version: 1.0 Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org SDI requires a regulator to operate. This regulator is, for some reason, currently attached to the virtual omapdss device, instead of the SDI device. This does not work for DT, as the regulator mappings need to be described in the DT data, and the virtual omapdss device is not present there. Fix the issue by acquiring the regulator in the SDI device. To retain compatibility with the current board files, the old method of getting the regulator is kept. The old method can be removed when the board files have been changed to pass the regulator to SDI. Signed-off-by: Tomi Valkeinen --- drivers/video/omap2/dss/sdi.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c index 6277c05..2e3afb8 100644 --- a/drivers/video/omap2/dss/sdi.c +++ b/drivers/video/omap2/dss/sdi.c @@ -31,8 +31,11 @@ #include "dss.h" static struct { + struct platform_device *pdev; + bool update_enabled; struct regulator *vdds_sdi_reg; + bool vdds_sdi_from_core; struct dss_lcd_mgr_config mgr_config; struct omap_video_timings timings; @@ -258,8 +261,14 @@ static int sdi_init_display(struct omap_dss_device *dssdev) vdds_sdi = dss_get_vdds_sdi(); if (IS_ERR(vdds_sdi)) { - DSSERR("can't get VDDS_SDI regulator\n"); - return PTR_ERR(vdds_sdi); + vdds_sdi = regulator_get(&sdi.pdev->dev, "vdds_sdi"); + if (IS_ERR(vdds_sdi)) { + DSSERR("can't get VDDS_SDI regulator\n"); + return PTR_ERR(vdds_sdi); + } + sdi.vdds_sdi_from_core = false; + } else { + sdi.vdds_sdi_from_core = true; } sdi.vdds_sdi_reg = vdds_sdi; @@ -363,6 +372,8 @@ static int omap_sdi_probe(struct platform_device *pdev) { int r; + sdi.pdev = pdev; + sdi_init_output(pdev); if (pdev->dev.platform_data) { @@ -384,6 +395,11 @@ static int __exit omap_sdi_remove(struct platform_device *pdev) sdi_uninit_output(pdev); + if (sdi.vdds_sdi_reg != NULL && sdi.vdds_sdi_from_core == false) { + regulator_put(sdi.vdds_sdi_reg); + sdi.vdds_sdi_reg = NULL; + } + return 0; }