Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp140862yba; Mon, 1 Apr 2019 03:32:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqyq17otFVp9j7Y6F3hr8MW8VJaaPrntNQ6fym/+n0vkJ0RBInE01eKrPaCOgqUeH93dsJ9D X-Received: by 2002:a65:5ac3:: with SMTP id d3mr36759049pgt.168.1554114720005; Mon, 01 Apr 2019 03:32:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554114719; cv=none; d=google.com; s=arc-20160816; b=fD+FWbkBAcp27ZiJeXIBx0og1H1N3H5z9MJrZH9sT5iykbCqqz//6G9ICrkX1ATiWj T8z1acM0+km6WDLc0EWFFqMWiishPTfV6rLOZzAyjmEvh501IVNbnFNoFrR0zwCh0XtZ jm2CTFO8c+HMXHuakYXXMprvZ5Co7RuPIOJjpi++HUvK1WmdR3gEdL4yUsr3D4ucX/QT /JcRGlrQAF9TL3mBVflmuBGxUy94yy02MFK4h1bgQNYsxXsnPhx1vw+15xJMdw+qxkWg QTyN/XknWGEVAj4hd3+PYKaNoZg+kDuoJNuATswgRfGgLPvejtVhP7NRIWrqeifU23ZL YM+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=K3L0ReIOR+2dXcBbMm6J0iDVhe+ZeTn11Ga/gPG2n+M=; b=FscKvqD9vNYSn9sygaqYt3YuiS8887473is6dJHjUBRzi1rrIjiWNuNrvETOFDFeuM NufgfnwJ//KX3GdrRo7onYJM4+2OCQF5RP3tSrwmYwOOh+1gmPu7QZyxLuJZ8ibwRYNs Sufqmxb11ukxO1QUmy9evqQKUutbv8ojUKFAg6ZiFQB8yNZmBbjLcTQwQgMDaBo49LAv +Rx5l6Qq4O2f/rEJpFTm/t5Jv3sOgI22YaE8Hy78IfWRc2KnIK/xxY0xrgGBIiL740Nz bBHVxQJjpfsb5rpP0azHDJrD42z/hXJWGuX8eMlhYNLnUHcG0Hp0GmjXHz8hgYPYX+nb 2WDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@onstation.org header.s=default header.b=LMynH7Dl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h128si8537165pgc.488.2019.04.01.03.31.44; Mon, 01 Apr 2019 03:31:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@onstation.org header.s=default header.b=LMynH7Dl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726542AbfDAKay (ORCPT + 99 others); Mon, 1 Apr 2019 06:30:54 -0400 Received: from onstation.org ([52.200.56.107]:36894 "EHLO onstation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726722AbfDAKal (ORCPT ); Mon, 1 Apr 2019 06:30:41 -0400 Received: from localhost.localdomain (c-98-239-145-235.hsd1.wv.comcast.net [98.239.145.235]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: masneyb) by onstation.org (Postfix) with ESMTPSA id 613424571E; Mon, 1 Apr 2019 10:30:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=onstation.org; s=default; t=1554114640; bh=LKI5QutWjmEa9X7MXO2InBl2G8mvzCmPoaPQ3bHxYAo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LMynH7DlcvOvu14NthY5tN6clcMCTcg0O7jv3CYS8OCNLJ+dIyPBsCkaNxqat5toQ x5R93Dk8CNtHhH6oiZ4zmJWm3aHcTNKykJoxWVf1t2vixo7RYaC/2e3BlcDcRJ0wYs anqbw5OjWEGd+3s01pqwwS4DS8R5UcBX0EHWyUpo= From: Brian Masney To: lee.jones@linaro.org, daniel.thompson@linaro.org, jingoohan1@gmail.com, robh+dt@kernel.org Cc: jacek.anaszewski@gmail.com, pavel@ucw.cz, mark.rutland@arm.com, b.zolnierkie@samsung.com, dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fbdev@vger.kernel.org, dmurphy@ti.com, jonathan@marek.ca Subject: [PATCH v2 3/3] backlight: lm3630a: add device tree supprt Date: Mon, 1 Apr 2019 06:30:34 -0400 Message-Id: <20190401103034.21062-4-masneyb@onstation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190401103034.21062-1-masneyb@onstation.org> References: <20190401103034.21062-1-masneyb@onstation.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add device tree support to the lm3630a driver and allow configuring independently on both banks the mapping mode (linear or exponential), initial and maximum LED brightness. Driver was tested on a LG Nexus 5 (hammerhead) phone. Signed-off-by: Brian Masney --- drivers/video/backlight/lm3630a_bl.c | 69 ++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/drivers/video/backlight/lm3630a_bl.c b/drivers/video/backlight/lm3630a_bl.c index ef2553f452ca..96fbc1273dda 100644 --- a/drivers/video/backlight/lm3630a_bl.c +++ b/drivers/video/backlight/lm3630a_bl.c @@ -35,6 +35,9 @@ #define REG_MAX 0x50 #define INT_DEBOUNCE_MSEC 10 + +#define LM3630A_MAX_SOURCES 2 + struct lm3630a_chip { struct device *dev; struct delayed_work work; @@ -364,6 +367,64 @@ static const struct regmap_config lm3630a_regmap = { .max_register = REG_MAX, }; +static void lm3630a_parse_dt(struct lm3630a_chip *pchip) +{ + u32 sources[LM3630A_MAX_SOURCES], val; + struct device_node *child_node; + int num_sources, ret, i; + bool linear; + + for_each_available_child_of_node(pchip->dev->of_node, child_node) { + num_sources = of_property_count_u32_elems(child_node, + "led-sources"); + if (num_sources < 0) + continue; + + if (num_sources > LM3630A_MAX_SOURCES) + num_sources = LM3630A_MAX_SOURCES; + + ret = of_property_read_u32_array(child_node, "led-sources", + sources, num_sources); + if (ret) { + dev_err(pchip->dev, + "Error parsing led-sources node: %d\n", ret); + return; + } + + linear = of_property_read_bool(child_node, + "ti,linear-mapping-mode"); + + for (i = 0; i < num_sources; i++) { + if (sources[i] == 0) + pchip->pdata->leda_ctrl = linear ? + LM3630A_LEDA_ENABLE_LINEAR : + LM3630A_LEDA_ENABLE; + else if (sources[i] == 1) + pchip->pdata->ledb_ctrl = linear ? + LM3630A_LEDB_ENABLE_LINEAR : + LM3630A_LEDB_ENABLE; + + ret = of_property_read_u32(child_node, + "default-brightness", &val); + if (!ret) { + if (sources[i] == 0) + pchip->pdata->leda_init_brt = val; + else if (sources[i] == 1) + pchip->pdata->ledb_init_brt = val; + } + + ret = of_property_read_u32(child_node, "max-brightness", + &val); + if (!ret) { + if (sources[i] == 0) + pchip->pdata->leda_max_brt = val; + else if (sources[i] == 1) + pchip->pdata->ledb_max_brt = val; + } + } + }; +} + static int lm3630a_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -405,6 +466,7 @@ static int lm3630a_probe(struct i2c_client *client, pdata->ledb_init_brt = LM3630A_MAX_BRIGHTNESS; } pchip->pdata = pdata; + lm3630a_parse_dt(pchip); /* chip initialize */ rval = lm3630a_chip_init(pchip); @@ -470,11 +532,18 @@ static const struct i2c_device_id lm3630a_id[] = { {} }; +static const struct of_device_id lm3630a_match_table[] = { + { .compatible = "ti,lm3630a", }, + { }, +}; + + MODULE_DEVICE_TABLE(i2c, lm3630a_id); static struct i2c_driver lm3630a_i2c_driver = { .driver = { .name = LM3630A_NAME, + .of_match_table = lm3630a_match_table, }, .probe = lm3630a_probe, .remove = lm3630a_remove, -- 2.20.1