Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/leds/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  leds-max77650.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
//
// Copyright (C) 2018 BayLibre SAS
// Author: Bartosz Golaszewski <bgolaszewski@baylibre.com>
//
// LED driver for MAXIM 77650/77651 charger/power-supply.

#include <linux/i2c.h>
#include <linux/leds.h>
#include <linux/mfd/max77650.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>

#define MAX77650_LED_NUM_LEDS  3

#define MAX77650_LED_A_BASE  0x40
#define MAX77650_LED_B_BASE  0x43

#define MAX77650_LED_BR_MASK  GENMASK(4, 0)
#define MAX77650_LED_EN_MASK  GENMASK(7, 6)

#define MAX77650_LED_MAX_BRIGHTNESS MAX77650_LED_BR_MASK

/* Enable EN_LED_MSTR. */
#define MAX77650_LED_TOP_DEFAULT BIT(0)

#define MAX77650_LED_ENABLE  GENMASK(7, 6)
#define MAX77650_LED_DISABLE  0x00

#define MAX77650_LED_A_DEFAULT  MAX77650_LED_DISABLE
/* 100% on duty */
#define MAX77650_LED_B_DEFAULT  GENMASK(3, 0)

struct max77650_led {
 struct led_classdev cdev;
 struct regmap *map;
 unsigned int regA;
 unsigned int regB;
};

static struct max77650_led *max77650_to_led(struct led_classdev *cdev)
{
 return container_of(cdev, struct max77650_led, cdev);
}

static int max77650_led_brightness_set(struct led_classdev *cdev,
           enum led_brightness brightness)
{
 struct max77650_led *led = max77650_to_led(cdev);
 int val, mask;

 mask = MAX77650_LED_BR_MASK | MAX77650_LED_EN_MASK;

 if (brightness == LED_OFF)
  val = MAX77650_LED_DISABLE;
 else
  val = MAX77650_LED_ENABLE | brightness;

 return regmap_update_bits(led->map, led->regA, mask, val);
}

static int max77650_led_probe(struct platform_device *pdev)
{
 struct max77650_led *leds, *led;
 struct device *dev;
 struct regmap *map;
 int rv, num_leds;
 u32 reg;

 dev = &pdev->dev;

 leds = devm_kcalloc(dev, sizeof(*leds),
       MAX77650_LED_NUM_LEDS, GFP_KERNEL);
 if (!leds)
  return -ENOMEM;

 map = dev_get_regmap(dev->parent, NULL);
 if (!map)
  return -ENODEV;

 num_leds = device_get_child_node_count(dev);
 if (!num_leds || num_leds > MAX77650_LED_NUM_LEDS)
  return -ENODEV;

 device_for_each_child_node_scoped(dev, child) {
  struct led_init_data init_data = {};

  rv = fwnode_property_read_u32(child, "reg", ®);
  if (rv || reg >= MAX77650_LED_NUM_LEDS)
   return -EINVAL;

  led = &leds[reg];
  led->map = map;
  led->regA = MAX77650_LED_A_BASE + reg;
  led->regB = MAX77650_LED_B_BASE + reg;
  led->cdev.brightness_set_blocking = max77650_led_brightness_set;
  led->cdev.max_brightness = MAX77650_LED_MAX_BRIGHTNESS;

  init_data.fwnode = child;
  init_data.devicename = "max77650";
  /* for backwards compatibility if `label` is not present */
  init_data.default_label = ":";

  rv = devm_led_classdev_register_ext(dev, &led->cdev,
          &init_data);
  if (rv)
   return rv;

  rv = regmap_write(map, led->regA, MAX77650_LED_A_DEFAULT);
  if (rv)
   return rv;

  rv = regmap_write(map, led->regB, MAX77650_LED_B_DEFAULT);
  if (rv)
   return rv;
 }

 return regmap_write(map,
       MAX77650_REG_CNFG_LED_TOP,
       MAX77650_LED_TOP_DEFAULT);
}

static const struct of_device_id max77650_led_of_match[] = {
 { .compatible = "maxim,max77650-led" },
 { }
};
MODULE_DEVICE_TABLE(of, max77650_led_of_match);

static struct platform_driver max77650_led_driver = {
 .driver = {
  .name = "max77650-led",
  .of_match_table = max77650_led_of_match,
 },
 .probe = max77650_led_probe,
};
module_platform_driver(max77650_led_driver);

MODULE_DESCRIPTION("MAXIM 77650/77651 LED driver");
MODULE_AUTHOR("Bartosz Golaszewski ");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:max77650-led");

Messung V0.5
C=94 H=100 G=96

¤ Dauer der Verarbeitung: 0.16 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.