Commit f6a4790a authored by Aaron Lu's avatar Aaron Lu Committed by Rafael J. Wysocki

video / backlight: add two APIs for drivers to use

It is useful to get the backlight device's pointer and use it to set
backlight in some cases(the following patch will make use of it) so add
the two APIs and export them.
Signed-off-by: default avatarAaron Lu <aaron.lu@intel.com>
Acked-by: default avatarJingoo Han <jg1.han@samsung.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 04974df8
...@@ -164,18 +164,10 @@ static ssize_t brightness_show(struct device *dev, ...@@ -164,18 +164,10 @@ static ssize_t brightness_show(struct device *dev,
return sprintf(buf, "%d\n", bd->props.brightness); return sprintf(buf, "%d\n", bd->props.brightness);
} }
static ssize_t brightness_store(struct device *dev, int backlight_device_set_brightness(struct backlight_device *bd,
struct device_attribute *attr, const char *buf, size_t count) unsigned long brightness)
{ {
int rc; int rc = -ENXIO;
struct backlight_device *bd = to_backlight_device(dev);
unsigned long brightness;
rc = kstrtoul(buf, 0, &brightness);
if (rc)
return rc;
rc = -ENXIO;
mutex_lock(&bd->ops_lock); mutex_lock(&bd->ops_lock);
if (bd->ops) { if (bd->ops) {
...@@ -185,7 +177,7 @@ static ssize_t brightness_store(struct device *dev, ...@@ -185,7 +177,7 @@ static ssize_t brightness_store(struct device *dev,
pr_debug("set brightness to %lu\n", brightness); pr_debug("set brightness to %lu\n", brightness);
bd->props.brightness = brightness; bd->props.brightness = brightness;
backlight_update_status(bd); backlight_update_status(bd);
rc = count; rc = 0;
} }
} }
mutex_unlock(&bd->ops_lock); mutex_unlock(&bd->ops_lock);
...@@ -194,6 +186,23 @@ static ssize_t brightness_store(struct device *dev, ...@@ -194,6 +186,23 @@ static ssize_t brightness_store(struct device *dev,
return rc; return rc;
} }
EXPORT_SYMBOL(backlight_device_set_brightness);
static ssize_t brightness_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count)
{
int rc;
struct backlight_device *bd = to_backlight_device(dev);
unsigned long brightness;
rc = kstrtoul(buf, 0, &brightness);
if (rc)
return rc;
rc = backlight_device_set_brightness(bd, brightness);
return rc ? rc : count;
}
static DEVICE_ATTR_RW(brightness); static DEVICE_ATTR_RW(brightness);
static ssize_t type_show(struct device *dev, struct device_attribute *attr, static ssize_t type_show(struct device *dev, struct device_attribute *attr,
...@@ -380,7 +389,7 @@ struct backlight_device *backlight_device_register(const char *name, ...@@ -380,7 +389,7 @@ struct backlight_device *backlight_device_register(const char *name,
} }
EXPORT_SYMBOL(backlight_device_register); EXPORT_SYMBOL(backlight_device_register);
bool backlight_device_registered(enum backlight_type type) struct backlight_device *backlight_device_get_by_type(enum backlight_type type)
{ {
bool found = false; bool found = false;
struct backlight_device *bd; struct backlight_device *bd;
...@@ -394,7 +403,13 @@ bool backlight_device_registered(enum backlight_type type) ...@@ -394,7 +403,13 @@ bool backlight_device_registered(enum backlight_type type)
} }
mutex_unlock(&backlight_dev_list_mutex); mutex_unlock(&backlight_dev_list_mutex);
return found; return found ? bd : NULL;
}
EXPORT_SYMBOL(backlight_device_get_by_type);
bool backlight_device_registered(enum backlight_type type)
{
return backlight_device_get_by_type(type) ? true : false;
} }
EXPORT_SYMBOL(backlight_device_registered); EXPORT_SYMBOL(backlight_device_registered);
......
...@@ -144,6 +144,8 @@ extern void backlight_force_update(struct backlight_device *bd, ...@@ -144,6 +144,8 @@ extern void backlight_force_update(struct backlight_device *bd,
extern bool backlight_device_registered(enum backlight_type type); extern bool backlight_device_registered(enum backlight_type type);
extern int backlight_register_notifier(struct notifier_block *nb); extern int backlight_register_notifier(struct notifier_block *nb);
extern int backlight_unregister_notifier(struct notifier_block *nb); extern int backlight_unregister_notifier(struct notifier_block *nb);
extern struct backlight_device *backlight_device_get_by_type(enum backlight_type type);
extern int backlight_device_set_brightness(struct backlight_device *bd, unsigned long brightness);
#define to_backlight_device(obj) container_of(obj, struct backlight_device, dev) #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment