Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  omap1_bl.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Backlight driver for OMAP based boards.
 *
 * Copyright (c) 2006 Andrzej Zaborowski  <balrog@zabor.org>
 */


#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/backlight.h>
#include <linux/slab.h>
#include <linux/platform_data/omap1_bl.h>

#include <linux/soc/ti/omap1-io.h>
#include <linux/soc/ti/omap1-mux.h>

#define OMAPBL_MAX_INTENSITY  0xff

struct omap_backlight {
 bool enabled;
 int current_intensity;

 struct device *dev;
 struct omap_backlight_config *pdata;
};

static inline void omapbl_send_intensity(int intensity)
{
 omap_writeb(intensity, OMAP_PWL_ENABLE);
}

static inline void omapbl_send_enable(int enable)
{
 omap_writeb(enable, OMAP_PWL_CLK_ENABLE);
}

static void omapbl_enable(struct omap_backlight *bl, bool enable)
{
 if (enable) {
  omapbl_send_intensity(bl->current_intensity);
  omapbl_send_enable(1);
 } else {
  omapbl_send_intensity(0);
  omapbl_send_enable(0);
 }
}

#ifdef CONFIG_PM_SLEEP
static int omapbl_suspend(struct device *dev)
{
 struct backlight_device *bl_dev = dev_get_drvdata(dev);
 struct omap_backlight *bl = bl_get_data(bl_dev);

 omapbl_enable(bl, false);
 return 0;
}

static int omapbl_resume(struct device *dev)
{
 struct backlight_device *bl_dev = dev_get_drvdata(dev);
 struct omap_backlight *bl = bl_get_data(bl_dev);

 omapbl_enable(bl, bl->enabled);
 return 0;
}
#endif

static void omapbl_set_enabled(struct backlight_device *dev, bool enable)
{
 struct omap_backlight *bl = bl_get_data(dev);

 omapbl_enable(bl, enable);
 bl->enabled = enable;
}

static int omapbl_update_status(struct backlight_device *dev)
{
 struct omap_backlight *bl = bl_get_data(dev);
 bool enable;

 if (bl->current_intensity != dev->props.brightness) {
  if (bl->enabled)
   omapbl_send_intensity(dev->props.brightness);
  bl->current_intensity = dev->props.brightness;
 }

 enable = !backlight_is_blank(dev);

 if (enable != bl->enabled)
  omapbl_set_enabled(dev, enable);

 return 0;
}

static int omapbl_get_intensity(struct backlight_device *dev)
{
 struct omap_backlight *bl = bl_get_data(dev);

 return bl->current_intensity;
}

static const struct backlight_ops omapbl_ops = {
 .get_brightness = omapbl_get_intensity,
 .update_status  = omapbl_update_status,
};

static int omapbl_probe(struct platform_device *pdev)
{
 struct backlight_properties props;
 struct backlight_device *dev;
 struct omap_backlight *bl;
 struct omap_backlight_config *pdata = dev_get_platdata(&pdev->dev);

 if (!pdata)
  return -ENXIO;

 bl = devm_kzalloc(&pdev->dev, sizeof(struct omap_backlight),
     GFP_KERNEL);
 if (unlikely(!bl))
  return -ENOMEM;

 memset(&props, 0, sizeof(struct backlight_properties));
 props.type = BACKLIGHT_RAW;
 props.max_brightness = OMAPBL_MAX_INTENSITY;
 dev = devm_backlight_device_register(&pdev->dev, "omap-bl", &pdev->dev,
     bl, &omapbl_ops, &props);
 if (IS_ERR(dev))
  return PTR_ERR(dev);

 bl->enabled = false;
 bl->current_intensity = 0;

 bl->pdata = pdata;
 bl->dev = &pdev->dev;

 platform_set_drvdata(pdev, dev);

 omap_cfg_reg(PWL); /* Conflicts with UART3 */

 dev->props.brightness = pdata->default_intensity;
 omapbl_update_status(dev);

 dev_info(&pdev->dev, "OMAP LCD backlight initialised\n");

 return 0;
}

static SIMPLE_DEV_PM_OPS(omapbl_pm_ops, omapbl_suspend, omapbl_resume);

static struct platform_driver omapbl_driver = {
 .probe  = omapbl_probe,
 .driver  = {
  .name = "omap-bl",
  .pm = &omapbl_pm_ops,
 },
};

module_platform_driver(omapbl_driver);

MODULE_AUTHOR("Andrzej Zaborowski ");
MODULE_DESCRIPTION("OMAP LCD Backlight driver");
MODULE_LICENSE("GPL");

Messung V0.5
C=94 H=90 G=91

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge