summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorZhou Jingyu <b02241@shlinux1.ap.freescale.net>2010-01-25 18:26:57 +0800
committerAlejandro Gonzalez <alex.gonzalez@digi.com>2010-05-25 11:09:58 +0200
commitc02def8a221e59c49cbf10906b121847c2dfabbe (patch)
tree679bed7178cc153cd6e932a582662e01824632a0 /drivers/video
parent7248dce8064850d3a821f7a9f3aa04dd987b58f0 (diff)
ENGR00117729 imx28: add mxs backlight
Add mxs backlight to mxs platform; Change stmp3xxx namings to mxs Signed-off-by: Zhou Jingyu <Jingyu.Zhou@freescale.com> Signed-off-by: Alejandro Gonzalez <alex.gonzalez@digi.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/backlight/Kconfig7
-rw-r--r--drivers/video/backlight/Makefile1
-rw-r--r--drivers/video/backlight/mxs_bl.c194
3 files changed, 108 insertions, 94 deletions
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 0da9bbbe6c92..c30926a72307 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -266,6 +266,13 @@ config BACKLIGHT_STMP37XX
If you have a STMP37xx, say y to enable the
backlight driver.
+config BACKLIGHT_MXS
+ tristate "Freescale MXS Backlight Driver"
+ depends on BACKLIGHT_CLASS_DEVICE && ARCH_MX28
+ default y
+ help
+ If you have a MXS, say y to enable the backlight driver.
+
config BACKLIGHT_WM8350
tristate "WM8350 Backlight Driver"
depends on BACKLIGHT_MXC && REGULATOR_WM8350
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 3b3abd75e2d8..2f530db27d5d 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -31,3 +31,4 @@ obj-$(CONFIG_BACKLIGHT_MXC_PMIC) += mxc_pmic_bl.o
obj-$(CONFIG_BACKLIGHT_WM8350) += wm8350_bl.o
obj-$(CONFIG_BACKLIGHT_MXC_MC13892) += mxc_mc13892_bl.o
obj-$(CONFIG_BACKLIGHT_STMP37XX) += stmp37xx_bl.o
+obj-$(CONFIG_BACKLIGHT_MXS) += mxs_bl.o
diff --git a/drivers/video/backlight/mxs_bl.c b/drivers/video/backlight/mxs_bl.c
index e39b3d9398e6..2e2e9a8ebad4 100644
--- a/drivers/video/backlight/mxs_bl.c
+++ b/drivers/video/backlight/mxs_bl.c
@@ -1,20 +1,26 @@
/*
- * Backlight Driver for Freescale STMP37XX/STMP378X
+ * Backlight Driver for Freescale MXS
*
* Embedded Alley Solutions, Inc <source@embeddedalley.com>
*
- * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright 2008-2010 Freescale Semiconductor, Inc.
* Copyright 2008 Embedded Alley Solutions, Inc All Rights Reserved.
- */
-
-/*
- * The code contained herein is licensed under the GNU General Public
- * License. You may obtain a copy of the GNU General Public License
- * Version 2 or later at the following locations:
*
- * http://www.opensource.org/licenses/gpl-license.html
- * http://www.gnu.org/copyleft/gpl.html
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
@@ -30,23 +36,23 @@
#include <mach/lcdif.h>
#include <mach/regulator.h>
-struct stmp3xxx_bl_data {
+struct mxs_bl_data {
struct notifier_block nb;
struct notifier_block reg_nb;
struct notifier_block reg_init_nb;
struct backlight_device *bd;
- struct stmp3xxx_platform_bl_data *pdata;
+ struct mxs_platform_bl_data *pdata;
int current_intensity;
int saved_intensity;
- int stmp3xxxbl_suspended;
- int stmp3xxxbl_constrained;
+ int mxsbl_suspended;
+ int mxsbl_constrained;
};
-static int stmp3xxxbl_do_probe(struct stmp3xxx_bl_data *data,
- struct stmp3xxx_platform_bl_data *pdata);
-static int stmp3xxxbl_set_intensity(struct backlight_device *bd);
-static inline void bl_register_reg(struct stmp3xxx_platform_bl_data *pdata,
- struct stmp3xxx_bl_data *data);
+static int mxsbl_do_probe(struct mxs_bl_data *data,
+ struct mxs_platform_bl_data *pdata);
+static int mxsbl_set_intensity(struct backlight_device *bd);
+static inline void bl_register_reg(struct mxs_platform_bl_data *pdata,
+ struct mxs_bl_data *data);
/*
@@ -55,11 +61,11 @@ static inline void bl_register_reg(struct stmp3xxx_platform_bl_data *pdata,
static int bl_init_reg_callback(struct notifier_block *self,
unsigned long event, void *data)
{
- struct stmp3xxx_bl_data *bdata;
- struct stmp3xxx_platform_bl_data *pdata;
- struct regulator *r = regulator_get(NULL, "stmp3xxx-bl-1");
+ struct mxs_bl_data *bdata;
+ struct mxs_platform_bl_data *pdata;
+ struct regulator *r = regulator_get(NULL, "mxs-bl-1");
- bdata = container_of(self, struct stmp3xxx_bl_data, reg_init_nb);
+ bdata = container_of(self, struct mxs_bl_data, reg_init_nb);
pdata = bdata->pdata;
if (r && !IS_ERR(r))
@@ -76,7 +82,7 @@ static int bl_init_reg_callback(struct notifier_block *self,
bus_unregister_notifier(&platform_bus_type,
&bdata->reg_init_nb);
mutex_lock(&bdata->bd->ops_lock);
- stmp3xxxbl_set_intensity(bdata->bd);
+ mxsbl_set_intensity(bdata->bd);
mutex_unlock(&bdata->bd->ops_lock);
}
@@ -87,34 +93,34 @@ out:
static int bl_reg_callback(struct notifier_block *self,
unsigned long event, void *data)
{
- struct stmp3xxx_bl_data *bdata;
- struct stmp3xxx_platform_bl_data *pdata;
- bdata = container_of(self, struct stmp3xxx_bl_data, reg_nb);
+ struct mxs_bl_data *bdata;
+ struct mxs_platform_bl_data *pdata;
+ bdata = container_of(self, struct mxs_bl_data, reg_nb);
pdata = bdata->pdata;
mutex_lock(&bdata->bd->ops_lock);
switch (event) {
- case STMP3XXX_REG5V_IS_USB:
+ case MXS_REG5V_IS_USB:
bdata->bd->props.max_brightness = pdata->bl_cons_intensity;
bdata->bd->props.brightness = pdata->bl_cons_intensity;
bdata->saved_intensity = bdata->current_intensity;
- bdata->stmp3xxxbl_constrained = 1;
+ bdata->mxsbl_constrained = 1;
break;
- case STMP3XXX_REG5V_NOT_USB:
+ case MXS_REG5V_NOT_USB:
bdata->bd->props.max_brightness = pdata->bl_max_intensity;
bdata->bd->props.brightness = bdata->saved_intensity;
- bdata->stmp3xxxbl_constrained = 0;
+ bdata->mxsbl_constrained = 0;
break;
}
- stmp3xxxbl_set_intensity(bdata->bd);
+ mxsbl_set_intensity(bdata->bd);
mutex_unlock(&bdata->bd->ops_lock);
return 0;
}
-static inline void bl_unregister_reg(struct stmp3xxx_platform_bl_data *pdata,
- struct stmp3xxx_bl_data *data)
+static inline void bl_unregister_reg(struct mxs_platform_bl_data *pdata,
+ struct mxs_bl_data *data)
{
if (!pdata)
return;
@@ -126,10 +132,10 @@ static inline void bl_unregister_reg(struct stmp3xxx_platform_bl_data *pdata,
pdata->regulator = NULL;
}
-static inline void bl_register_reg(struct stmp3xxx_platform_bl_data *pdata,
- struct stmp3xxx_bl_data *data)
+static inline void bl_register_reg(struct mxs_platform_bl_data *pdata,
+ struct mxs_bl_data *data)
{
- pdata->regulator = regulator_get(NULL, "stmp3xxx-bl-1");
+ pdata->regulator = regulator_get(NULL, "mxs-bl-1");
if (pdata->regulator && !IS_ERR(pdata->regulator)) {
regulator_set_mode(pdata->regulator, REGULATOR_MODE_FAST);
if (pdata->regulator) {
@@ -147,13 +153,13 @@ static inline void bl_register_reg(struct stmp3xxx_platform_bl_data *pdata,
static int bl_callback(struct notifier_block *self,
unsigned long event, void *data)
{
- struct stmp3xxx_platform_fb_entry *pentry = data;
- struct stmp3xxx_bl_data *bdata;
- struct stmp3xxx_platform_bl_data *pdata;
+ struct mxs_platform_fb_entry *pentry = data;
+ struct mxs_bl_data *bdata;
+ struct mxs_platform_bl_data *pdata;
switch (event) {
- case STMP3XXX_LCDIF_PANEL_INIT:
- bdata = container_of(self, struct stmp3xxx_bl_data, nb);
+ case MXS_LCDIF_PANEL_INIT:
+ bdata = container_of(self, struct mxs_bl_data, nb);
pdata = pentry->bl_data;
bdata->pdata = pdata;
if (pdata) {
@@ -165,12 +171,12 @@ static int bl_callback(struct notifier_block *self,
bus_register_notifier(&platform_bus_type,
&bdata->reg_init_nb);
}
- return stmp3xxxbl_do_probe(bdata, pdata);
+ return mxsbl_do_probe(bdata, pdata);
}
break;
- case STMP3XXX_LCDIF_PANEL_RELEASE:
- bdata = container_of(self, struct stmp3xxx_bl_data, nb);
+ case MXS_LCDIF_PANEL_RELEASE:
+ bdata = container_of(self, struct mxs_bl_data, nb);
pdata = pentry->bl_data;
if (pdata) {
bus_unregister_notifier(&platform_bus_type,
@@ -185,56 +191,56 @@ static int bl_callback(struct notifier_block *self,
}
#ifdef CONFIG_PM
-static int stmp3xxxbl_suspend(struct platform_device *pdev, pm_message_t state)
+static int mxsbl_suspend(struct platform_device *pdev, pm_message_t state)
{
- struct stmp3xxx_bl_data *data = platform_get_drvdata(pdev);
- struct stmp3xxx_platform_bl_data *pdata = data->pdata;
+ struct mxs_bl_data *data = platform_get_drvdata(pdev);
+ struct mxs_platform_bl_data *pdata = data->pdata;
- data->stmp3xxxbl_suspended = 1;
+ data->mxsbl_suspended = 1;
if (pdata) {
dev_dbg(&pdev->dev, "real suspend\n");
- stmp3xxxbl_set_intensity(data->bd);
+ mxsbl_set_intensity(data->bd);
}
return 0;
}
-static int stmp3xxxbl_resume(struct platform_device *pdev)
+static int mxsbl_resume(struct platform_device *pdev)
{
- struct stmp3xxx_bl_data *data = platform_get_drvdata(pdev);
- struct stmp3xxx_platform_bl_data *pdata = data->pdata;
+ struct mxs_bl_data *data = platform_get_drvdata(pdev);
+ struct mxs_platform_bl_data *pdata = data->pdata;
int ret = 0;
- data->stmp3xxxbl_suspended = 0;
+ data->mxsbl_suspended = 0;
if (pdata) {
dev_dbg(&pdev->dev, "real resume\n");
pdata->free_bl(pdata);
ret = pdata->init_bl(pdata);
if (ret)
goto out;
- stmp3xxxbl_set_intensity(data->bd);
+ mxsbl_set_intensity(data->bd);
}
out:
return ret;
}
#else
-#define stmp3xxxbl_suspend NULL
-#define stmp3xxxbl_resume NULL
+#define mxsbl_suspend NULL
+#define mxsbl_resume NULL
#endif
/*
* This function should be called with bd->ops_lock held
* Suspend/resume ?
*/
-static int stmp3xxxbl_set_intensity(struct backlight_device *bd)
+static int mxsbl_set_intensity(struct backlight_device *bd)
{
struct platform_device *pdev = dev_get_drvdata(&bd->dev);
- struct stmp3xxx_bl_data *data = platform_get_drvdata(pdev);
- struct stmp3xxx_platform_bl_data *pdata = data->pdata;
+ struct mxs_bl_data *data = platform_get_drvdata(pdev);
+ struct mxs_platform_bl_data *pdata = data->pdata;
if (pdata) {
int ret;
ret = pdata->set_bl_intensity(pdata, bd,
- data->stmp3xxxbl_suspended);
+ data->mxsbl_suspended);
if (ret)
bd->props.brightness = data->current_intensity;
else
@@ -244,21 +250,21 @@ static int stmp3xxxbl_set_intensity(struct backlight_device *bd)
return -ENODEV;
}
-static int stmp3xxxbl_get_intensity(struct backlight_device *bd)
+static int mxsbl_get_intensity(struct backlight_device *bd)
{
struct platform_device *pdev = dev_get_drvdata(&bd->dev);
- struct stmp3xxx_bl_data *data = platform_get_drvdata(pdev);
+ struct mxs_bl_data *data = platform_get_drvdata(pdev);
return data->current_intensity;
}
-static struct backlight_ops stmp3xxxbl_ops = {
- .get_brightness = stmp3xxxbl_get_intensity,
- .update_status = stmp3xxxbl_set_intensity,
+static struct backlight_ops mxsbl_ops = {
+ .get_brightness = mxsbl_get_intensity,
+ .update_status = mxsbl_set_intensity,
};
-static int stmp3xxxbl_do_probe(struct stmp3xxx_bl_data *data,
- struct stmp3xxx_platform_bl_data *pdata)
+static int mxsbl_do_probe(struct mxs_bl_data *data,
+ struct mxs_platform_bl_data *pdata)
{
int ret = pdata->init_bl(pdata);
@@ -267,7 +273,7 @@ static int stmp3xxxbl_do_probe(struct stmp3xxx_bl_data *data,
data->bd->props.power = FB_BLANK_UNBLANK;
data->bd->props.fb_blank = FB_BLANK_UNBLANK;
- if (data->stmp3xxxbl_constrained) {
+ if (data->mxsbl_constrained) {
data->bd->props.max_brightness = pdata->bl_cons_intensity;
data->bd->props.brightness = pdata->bl_cons_intensity;
} else {
@@ -276,16 +282,16 @@ static int stmp3xxxbl_do_probe(struct stmp3xxx_bl_data *data,
}
data->pdata = pdata;
- stmp3xxxbl_set_intensity(data->bd);
+ mxsbl_set_intensity(data->bd);
out:
return ret;
}
-static int __init stmp3xxxbl_probe(struct platform_device *pdev)
+static int __init mxsbl_probe(struct platform_device *pdev)
{
- struct stmp3xxx_bl_data *data;
- struct stmp3xxx_platform_bl_data *pdata = pdev->dev.platform_data;
+ struct mxs_bl_data *data;
+ struct mxs_platform_bl_data *pdata = pdev->dev.platform_data;
int ret = 0;
data = kzalloc(sizeof(*data), GFP_KERNEL);
@@ -294,7 +300,7 @@ static int __init stmp3xxxbl_probe(struct platform_device *pdev)
goto out;
}
data->bd = backlight_device_register(pdev->name, &pdev->dev, pdev,
- &stmp3xxxbl_ops);
+ &mxsbl_ops);
if (IS_ERR(data->bd)) {
ret = PTR_ERR(data->bd);
goto out_1;
@@ -303,11 +309,11 @@ static int __init stmp3xxxbl_probe(struct platform_device *pdev)
get_device(&pdev->dev);
data->nb.notifier_call = bl_callback;
- stmp3xxx_lcdif_register_client(&data->nb);
+ mxs_lcdif_register_client(&data->nb);
platform_set_drvdata(pdev, data);
if (pdata) {
- ret = stmp3xxxbl_do_probe(data, pdata);
+ ret = mxsbl_do_probe(data, pdata);
if (ret)
goto out_2;
}
@@ -322,10 +328,10 @@ out:
return ret;
}
-static int stmp3xxxbl_remove(struct platform_device *pdev)
+static int mxsbl_remove(struct platform_device *pdev)
{
- struct stmp3xxx_platform_bl_data *pdata = pdev->dev.platform_data;
- struct stmp3xxx_bl_data *data = platform_get_drvdata(pdev);
+ struct mxs_platform_bl_data *pdata = pdev->dev.platform_data;
+ struct mxs_bl_data *data = platform_get_drvdata(pdev);
struct backlight_device *bd = data->bd;
bd->props.power = FB_BLANK_POWERDOWN;
@@ -334,7 +340,7 @@ static int stmp3xxxbl_remove(struct platform_device *pdev)
data->current_intensity = bd->props.brightness;
if (pdata) {
- pdata->set_bl_intensity(pdata, bd, data->stmp3xxxbl_suspended);
+ pdata->set_bl_intensity(pdata, bd, data->mxsbl_suspended);
if (pdata->free_bl)
pdata->free_bl(pdata);
}
@@ -343,36 +349,36 @@ static int stmp3xxxbl_remove(struct platform_device *pdev)
regulator_put(pdata->regulator);
put_device(&pdev->dev);
platform_set_drvdata(pdev, NULL);
- stmp3xxx_lcdif_unregister_client(&data->nb);
+ mxs_lcdif_unregister_client(&data->nb);
kfree(data);
return 0;
}
-static struct platform_driver stmp3xxxbl_driver = {
- .probe = stmp3xxxbl_probe,
- .remove = __devexit_p(stmp3xxxbl_remove),
- .suspend = stmp3xxxbl_suspend,
- .resume = stmp3xxxbl_resume,
+static struct platform_driver mxsbl_driver = {
+ .probe = mxsbl_probe,
+ .remove = __devexit_p(mxsbl_remove),
+ .suspend = mxsbl_suspend,
+ .resume = mxsbl_resume,
.driver = {
- .name = "stmp3xxx-bl",
+ .name = "mxs-bl",
.owner = THIS_MODULE,
},
};
-static int __init stmp3xxx_init(void)
+static int __init mxs_init(void)
{
- return platform_driver_register(&stmp3xxxbl_driver);
+ return platform_driver_register(&mxsbl_driver);
}
-static void __exit stmp3xxx_exit(void)
+static void __exit mxs_exit(void)
{
- platform_driver_unregister(&stmp3xxxbl_driver);
+ platform_driver_unregister(&mxsbl_driver);
}
-module_init(stmp3xxx_init);
-module_exit(stmp3xxx_exit);
+module_init(mxs_init);
+module_exit(mxs_exit);
MODULE_AUTHOR("Embedded Alley Solutions, Inc <sources@embeddedalley.com>");
-MODULE_DESCRIPTION("STMP3xxx Backlight Driver");
+MODULE_DESCRIPTION("MXS Backlight Driver");
MODULE_LICENSE("GPL");