#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/backlight.h>
#include <linux/mfd/aat2870.h>
struct aat2870_bl_driver_data {
struct platform_device *pdev;
struct backlight_device *bd;
static inline int aat2870_brightness(struct aat2870_bl_driver_data *aat2870_bl,
struct backlight_device *bd = aat2870_bl->bd;
val = brightness * (aat2870_bl->max_current - 1);
val /= bd->props.max_brightness;
static inline int aat2870_bl_enable(struct aat2870_bl_driver_data *aat2870_bl)
struct aat2870_data *aat2870
= dev_get_drvdata(aat2870_bl->pdev->dev.parent);
return aat2870->write(aat2870, AAT2870_BL_CH_EN,
(u8)aat2870_bl->channels);
static inline int aat2870_bl_disable(struct aat2870_bl_driver_data *aat2870_bl)
struct aat2870_data *aat2870
= dev_get_drvdata(aat2870_bl->pdev->dev.parent);
return aat2870->write(aat2870, AAT2870_BL_CH_EN, 0x0);
static int aat2870_bl_update_status(struct backlight_device *bd)
struct aat2870_bl_driver_data *aat2870_bl = bl_get_data(bd);
struct aat2870_data *aat2870 =
dev_get_drvdata(aat2870_bl->pdev->dev.parent);
int brightness = bd->props.brightness;
if ((brightness < 0) || (bd->props.max_brightness < brightness)) {
dev_err(&bd->dev, "invalid brightness, %d\n", brightness);
dev_dbg(&bd->dev, "brightness=%d, power=%d, state=%d\n",
bd->props.brightness, bd->props.power, bd->props.state);
if ((bd->props.power != FB_BLANK_UNBLANK) ||
(bd->props.state & BL_CORE_FBBLANK) ||
(bd->props.state & BL_CORE_SUSPENDED))
ret = aat2870->write(aat2870, AAT2870_BLM,
(u8)aat2870_brightness(aat2870_bl, brightness));