Skip to content

Commit

Permalink
MIPS: ath79: add common GPIO LEDs device
Browse files Browse the repository at this point in the history
Almost all boards have one or more LEDs connected to GPIO lines. This
patch adds common code to register a platform_device for them.

The patch also adds support for the LEDs on the PB44 board.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
Cc: linux-mips@linux-mips.org
Cc: Luis R. Rodriguez <lrodriguez@atheros.com>
Cc: Cliff Holden <Cliff.Holden@Atheros.com>
Cc: Kathy Giori <Kathy.Giori@Atheros.com>
Patchwork: https://patchwork.linux-mips.org/patch/1953/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Gabor Juhos authored and Ralf Baechle committed Jan 18, 2011
1 parent 0cde722 commit d8fec1f
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 0 deletions.
4 changes: 4 additions & 0 deletions arch/mips/ath79/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ menu "Atheros AR71XX/AR724X/AR913X machine selection"
config ATH79_MACH_PB44
bool "Atheros PB44 reference board"
select SOC_AR71XX
select ATH79_DEV_LEDS_GPIO
help
Say 'Y' here if you want your kernel to support the
Atheros PB44 reference board.
Expand All @@ -20,4 +21,7 @@ config SOC_AR724X
config SOC_AR913X
def_bool n

config ATH79_DEV_LEDS_GPIO
def_bool n

endif
1 change: 1 addition & 0 deletions arch/mips/ath79/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
# Devices
#
obj-y += dev-common.o
obj-$(CONFIG_ATH79_DEV_LEDS_GPIO) += dev-leds-gpio.o

#
# Machines
Expand Down
56 changes: 56 additions & 0 deletions arch/mips/ath79/dev-leds-gpio.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Atheros AR71XX/AR724X/AR913X common GPIO LEDs support
*
* Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation.
*/

#include <linux/init.h>
#include <linux/slab.h>
#include <linux/platform_device.h>

#include "dev-leds-gpio.h"

void __init ath79_register_leds_gpio(int id,
unsigned num_leds,
struct gpio_led *leds)
{
struct platform_device *pdev;
struct gpio_led_platform_data pdata;
struct gpio_led *p;
int err;

p = kmalloc(num_leds * sizeof(*p), GFP_KERNEL);
if (!p)
return;

memcpy(p, leds, num_leds * sizeof(*p));

pdev = platform_device_alloc("leds-gpio", id);
if (!pdev)
goto err_free_leds;

memset(&pdata, 0, sizeof(pdata));
pdata.num_leds = num_leds;
pdata.leds = p;

err = platform_device_add_data(pdev, &pdata, sizeof(pdata));
if (err)
goto err_put_pdev;

err = platform_device_add(pdev);
if (err)
goto err_put_pdev;

return;

err_put_pdev:
platform_device_put(pdev);

err_free_leds:
kfree(p);
}
21 changes: 21 additions & 0 deletions arch/mips/ath79/dev-leds-gpio.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* Atheros AR71XX/AR724X/AR913X common GPIO LEDs support
*
* Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation.
*/

#ifndef _ATH79_DEV_LEDS_GPIO_H
#define _ATH79_DEV_LEDS_GPIO_H

#include <linux/leds.h>

void ath79_register_leds_gpio(int id,
unsigned num_leds,
struct gpio_led *leds);

#endif /* _ATH79_DEV_LEDS_GPIO_H */
18 changes: 18 additions & 0 deletions arch/mips/ath79/mach-pb44.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@
#include <linux/i2c/pcf857x.h>

#include "machtypes.h"
#include "dev-leds-gpio.h"

#define PB44_GPIO_I2C_SCL 0
#define PB44_GPIO_I2C_SDA 1

#define PB44_GPIO_EXP_BASE 16
#define PB44_GPIO_LED_JUMP1 (PB44_GPIO_EXP_BASE + 9)
#define PB44_GPIO_LED_JUMP2 (PB44_GPIO_EXP_BASE + 10)

static struct i2c_gpio_platform_data pb44_i2c_gpio_data = {
.sda_pin = PB44_GPIO_I2C_SDA,
Expand All @@ -45,11 +48,26 @@ static struct i2c_board_info pb44_i2c_board_info[] __initdata = {
},
};

static struct gpio_led pb44_leds_gpio[] __initdata = {
{
.name = "pb44:amber:jump1",
.gpio = PB44_GPIO_LED_JUMP1,
.active_low = 1,
}, {
.name = "pb44:green:jump2",
.gpio = PB44_GPIO_LED_JUMP2,
.active_low = 1,
},
};

static void __init pb44_init(void)
{
i2c_register_board_info(0, pb44_i2c_board_info,
ARRAY_SIZE(pb44_i2c_board_info));
platform_device_register(&pb44_i2c_gpio_device);

ath79_register_leds_gpio(-1, ARRAY_SIZE(pb44_leds_gpio),
pb44_leds_gpio);
}

MIPS_MACHINE(ATH79_MACH_PB44, "PB44", "Atheros PB44 reference board",
Expand Down

0 comments on commit d8fec1f

Please sign in to comment.