Ticket #9239: 01-backport-ledtrig-usbdev.patch

File 01-backport-ledtrig-usbdev.patch, 18.5 KB (added by magyarsz, 7 years ago)
  • package/base-files/files/etc/init.d/led

    a b  
    1212        local default 
    1313        local delayon 
    1414        local delayoff 
     15        local interval 
    1516 
    1617        config_get sysfs $1 sysfs 
    1718        config_get name $1 name "$sysfs" 
     
    2122        config_get_bool default $1 default "nil" 
    2223        config_get delayon $1 delayon 
    2324        config_get delayoff $1 delayoff 
     25        config_get interval $1 interval "50" 
    2426 
    2527        [ -e /sys/class/leds/${sysfs}/brightness ] && { 
    2628                echo "setting up led ${name}" 
    27                 [ "$default" != nil ] && {  
    28                         [ $default -eq 1 ] &&  
    29                                 echo 1 >/sys/class/leds/${sysfs}/brightness  
     29                [ "$default" != nil ] && { 
     30                        [ $default -eq 1 ] && 
     31                                echo 1 >/sys/class/leds/${sysfs}/brightness 
    3032                        [ $default -eq 1 ] || 
    3133                                echo 0 >/sys/class/leds/${sysfs}/brightness 
    3234                } 
     
    3436                [ "$trigger" == "netdev" -a -n "$dev" ] && { 
    3537                        echo $dev > /sys/class/leds/${sysfs}/device_name 
    3638                        echo $mode > /sys/class/leds/${sysfs}/mode 
    37                 }  
     39                } 
    3840                [ "$trigger" == "timer" ] && { 
    3941                        [ -n "$delayon" ] && echo $delayon > /sys/class/leds/${sysfs}/delay_on 
    4042                        [ -n "$delayoff" ] && echo $delayoff > /sys/class/leds/${sysfs}/delay_off 
    4143                } 
     44                [ "$trigger" == "usbdev" -a -n "$dev" ] && { 
     45                        echo $dev > /sys/class/leds/${sysfs}/device_name 
     46                        echo $interval > /sys/class/leds/${sysfs}/activity_interval 
     47                } 
    4248        } 
    4349} 
    4450 
  • package/base-files/Makefile

    a b  
    1010include $(INCLUDE_DIR)/kernel.mk 
    1111 
    1212PKG_NAME:=base-files 
    13 PKG_RELEASE:=43.15 
     13PKG_RELEASE:=43.16 
    1414 
    1515PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ 
    1616PKG_BUILD_DEPENDS:=opkg/host 
  • package/kernel/modules/other.mk

    a b  
    584584$(eval $(call KernelPackage,ledtrig-morse)) 
    585585 
    586586 
     587define KernelPackage/ledtrig-usbdev 
     588  SUBMENU:=$(OTHER_MENU) 
     589  TITLE:=LED USB device Trigger 
     590  DEPENDS:=@USB_SUPPORT +kmod-usb-core 
     591  KCONFIG:=CONFIG_LEDS_TRIGGER_USBDEV 
     592  FILES:=$(LINUX_DIR)/drivers/leds/ledtrig-usbdev.$(LINUX_KMOD_SUFFIX) 
     593  AUTOLOAD:=$(call AutoLoad,50,ledtrig-usbdev) 
     594endef 
     595 
     596define KernelPackage/ledtrig-usbdev/description 
     597 Kernel module to drive LEDs based on USB device presence/activity. 
     598endef 
     599 
     600$(eval $(call KernelPackage,ledtrig-usbdev)) 
     601 
     602 
    587603define KernelPackage/gpio-dev 
    588604  SUBMENU:=$(OTHER_MENU) 
    589605  TITLE:=Generic GPIO char device support 
  • target/linux/ar71xx/base-files/etc/uci-defaults/dir-825

    a b  
     1#!/bin/sh 
     2# 
     3# Copyright (C) 2010 OpenWrt.org 
     4# 
     5 
     6. /lib/ar71xx.sh 
     7 
     8board=$(ar71xx_board_name) 
     9 
     10dir825b1_setup_leds() { 
     11        uci batch <<EOF 
     12set system.usb_led=led 
     13set system.usb_led.name='USB' 
     14set system.usb_led.sysfs='dir825b1:blue:usb' 
     15set system.usb_led.trigger='usbdev' 
     16set system.usb_led.dev='1-1' 
     17set system.usb_led.interval='50' 
     18commit system 
     19EOF 
     20} 
     21 
     22if [ "${board}" == "dir-825-b1" ]; then 
     23        dir825b1_setup_leds 
     24fi 
  • target/linux/ar71xx/base-files/etc/uci-defaults/mzk-w04nu

    a b  
     1#!/bin/sh 
     2# 
     3# Copyright (C) 2010 OpenWrt.org 
     4# 
     5 
     6. /lib/ar71xx.sh 
     7 
     8board=$(ar71xx_board_name) 
     9 
     10mzk_w04nu_setup_leds() { 
     11        uci batch <<EOF 
     12set system.usb_led=led 
     13set system.usb_led.name='USB' 
     14set system.usb_led.sysfs='mzk-w04nu:green:usb' 
     15set system.usb_led.trigger='usbdev' 
     16set system.usb_led.dev='1-1' 
     17set system.usb_led.interval='50' 
     18commit system 
     19EOF 
     20} 
     21 
     22if [ "${board}" == "mzk-w04u" ]; then 
     23        mzk_w04nu_setup_leds 
     24fi 
  • target/linux/ar71xx/base-files/etc/uci-defaults/tl-wr1043nd

    a b  
    77 
    88board=$(ar71xx_board_name) 
    99 
    10 tlwr1043nd_set_wlan_led() { 
     10tlwr1043nd_set_leds() { 
    1111        uci batch <<EOF 
    1212set system.wlan_led=led 
    1313set system.wlan_led.name='WLAN' 
    1414set system.wlan_led.sysfs='tl-wr1043nd:green:wlan' 
    1515set system.wlan_led.trigger='phy0rx' 
     16set system.usb_led=led 
     17set system.usb_led.name='USB' 
     18set system.usb_led.sysfs='tl-wr1043nd:green:usb' 
     19set system.usb_led.trigger='usbdev' 
     20set system.usb_led.dev='1-1' 
     21set system.usb_led.interval='50' 
    1622commit system 
    1723EOF 
    1824} 
    1925 
    2026if [ "${board}" == "tl-wr1043nd" ]; then 
    21         tlwr1043nd_set_wlan_led 
     27        tlwr1043nd_set_leds 
    2228fi 
  • target/linux/ar71xx/base-files/etc/uci-defaults/wndr3700

    a b  
    77 
    88board=$(ar71xx_board_name) 
    99 
    10 wndr3700_set_wan_led() { 
     10wndr3700_set_leds() { 
    1111        uci batch <<EOF 
    1212set system.wan_led=led 
    1313set system.wan_led.sysfs='wndr3700:green:wan' 
    1414set system.wan_led.name='WAN LED (green)' 
    1515set system.wan_led.default='0' 
     16set system.usb_led=led 
     17set system.usb_led.name='USB' 
     18set system.usb_led.sysfs='wndr3700:green:usb' 
     19set system.usb_led.trigger='usbdev' 
     20set system.usb_led.dev='1-1' 
     21set system.usb_led.interval='50' 
    1622commit system 
    1723EOF 
    1824} 
    1925 
    2026if [ "${board}" == "wndr3700" -o "${board}" == "wndr3700v2" ]; then 
    21         wndr3700_set_wan_led 
     27        wndr3700_set_leds 
    2228fi 
  • target/linux/ar71xx/base-files/etc/uci-defaults/wzr-hp-g300nh

    a b  
    2121set system.@led[-1].trigger='netdev' 
    2222set system.@led[-1].dev='eth1' 
    2323set system.@led[-1].mode='link tx rx' 
     24add system led 
     25set system.@led[-1]='led' 
     26set system.@led[-1].name='USB' 
     27set system.@led[-1].sysfs='wzr-hp-g300nh:blue:usb' 
     28set system.@led[-1].trigger='usbdev' 
     29set system.@led[-1].dev='1-1' 
     30set system.@led[-1].interval='50' 
    2431commit system 
    2532EOF 
    2633} 
  • target/linux/ar71xx/profiles/00-default.mk

    a b  
    77 
    88define Profile/Default 
    99        NAME:=Default Profile (all drivers) 
    10         PACKAGES:=kmod-ath9k kmod-madwifi kmod-usb-core kmod-usb-ohci kmod-usb2 swconfig vsc7385-ucode-ap83 vsc7385-ucode-pb44 vsc7395-ucode-ap83 vsc7395-ucode-pb44 wpad-mini 
     10        PACKAGES:=kmod-ath9k kmod-madwifi kmod-usb-core kmod-usb-ohci kmod-usb2 swconfig vsc7385-ucode-ap83 vsc7385-ucode-pb44 vsc7395-ucode-ap83 vsc7395-ucode-pb44 wpad-mini kmod-ledtrig-usbdev 
    1111endef 
    1212 
    1313define Profile/Default/Description 
  • target/linux/ar71xx/profiles/buffalo.mk

    a b  
    77 
    88define Profile/WZRHPG300NH 
    99        NAME:=Buffalo WZR-HP-G300NH 
    10         PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb2 
     10        PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev 
    1111endef 
    1212 
    1313define Profile/WZRHPG300NH/Description 
  • target/linux/ar71xx/profiles/d-link.mk

    a b  
    3131 
    3232define Profile/DIR825B1 
    3333        NAME:=D-Link DIR-825 rev. B1 
    34         PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb2 
     34        PACKAGES:=\ 
     35                kmod-ath9k wpad-mini kmod-usb-core kmod-usb-ohci kmod-usb2 \ 
     36                kmod-ledtrig-usbdev 
    3537endef 
    3638 
    3739define Profile/DIR825B1/Description 
  • target/linux/ar71xx/profiles/netgear.mk

    a b  
    77 
    88define Profile/WNDR3700 
    99        NAME:=NETGEAR WNDR3700 
    10         PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb-ohci kmod-usb2 
     10        PACKAGES:=\ 
     11                kmod-ath9k wpad-mini kmod-usb-core kmod-usb-ohci kmod-usb2 \ 
     12                kmod-ledtrig-usbdev 
    1113endef 
    1214 
    1315define Profile/WNDR3700/Description 
  • target/linux/ar71xx/profiles/planex.mk

    a b  
    77 
    88define Profile/MZKW04NU 
    99        NAME:=Planex MZK-W04NU 
    10         PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb2 
     10        PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev 
    1111endef 
    1212 
    1313define Profile/MZKW04NU/Description 
  • target/linux/ar71xx/profiles/tp-link.mk

    a b  
    8484 
    8585define Profile/TLWR1043NDV1 
    8686        NAME:=TP-LINK TL-WR1043ND v1 
    87         PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb2 
     87        PACKAGES:=kmod-ath9k wpad-mini kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev 
    8888endef 
    8989 
    9090define Profile/TLWR1043NDV1/Description 
  • target/linux/generic-2.6/config-2.6.32

    a b  
    11541154CONFIG_LEDS_TRIGGER_NETDEV=y 
    11551155CONFIG_LEDS_TRIGGERS=y 
    11561156CONFIG_LEDS_TRIGGER_TIMER=y 
     1157# CONFIG_LEDS_TRIGGER_USBDEV is not set 
    11571158# CONFIG_LEGACY_PTYS is not set 
    11581159# CONFIG_LIB80211_CRYPT_CCMP is not set 
    11591160# CONFIG_LIB80211_CRYPT_TKIP is not set 
  • target/linux/generic-2.6/files/drivers/leds/ledtrig-usbdev.c

    a b  
     1/* 
     2 * LED USB device Trigger 
     3 * 
     4 * Toggles the LED to reflect the presence and activity of an USB device 
     5 * Copyright (C) Gabor Juhos <juhosg@openwrt.org> 
     6 * 
     7 * derived from ledtrig-netdev.c: 
     8 *      Copyright 2007 Oliver Jowett <oliver@opencloud.com> 
     9 * 
     10 * ledtrig-netdev.c derived from ledtrig-timer.c: 
     11 *      Copyright 2005-2006 Openedhand Ltd. 
     12 *      Author: Richard Purdie <rpurdie@openedhand.com> 
     13 * 
     14 * This program is free software; you can redistribute it and/or modify 
     15 * it under the terms of the GNU General Public License version 2 as 
     16 * published by the Free Software Foundation. 
     17 * 
     18 */ 
     19 
     20#include <linux/module.h> 
     21#include <linux/jiffies.h> 
     22#include <linux/kernel.h> 
     23#include <linux/init.h> 
     24#include <linux/list.h> 
     25#include <linux/spinlock.h> 
     26#include <linux/device.h> 
     27#include <linux/sysdev.h> 
     28#include <linux/timer.h> 
     29#include <linux/ctype.h> 
     30#include <linux/slab.h> 
     31#include <linux/leds.h> 
     32#include <linux/usb.h> 
     33 
     34#include "leds.h" 
     35 
     36#define DEV_BUS_ID_SIZE         32 
     37 
     38/* 
     39 * Configurable sysfs attributes: 
     40 * 
     41 * device_name - name of the USB device to monitor 
     42 * activity_interval - duration of LED blink, in milliseconds 
     43 */ 
     44 
     45struct usbdev_trig_data { 
     46        rwlock_t lock; 
     47 
     48        struct timer_list timer; 
     49        struct notifier_block notifier; 
     50 
     51        struct led_classdev *led_cdev; 
     52        struct usb_device *usb_dev; 
     53 
     54        char device_name[DEV_BUS_ID_SIZE]; 
     55        unsigned interval; 
     56        int last_urbnum; 
     57}; 
     58 
     59static void usbdev_trig_update_state(struct usbdev_trig_data *td) 
     60{ 
     61        if (td->usb_dev) 
     62                led_set_brightness(td->led_cdev, LED_FULL); 
     63        else 
     64                led_set_brightness(td->led_cdev, LED_OFF); 
     65 
     66        if (td->interval && td->usb_dev) 
     67                mod_timer(&td->timer, jiffies + td->interval); 
     68        else 
     69                del_timer(&td->timer); 
     70} 
     71 
     72static ssize_t usbdev_trig_name_show(struct device *dev, 
     73                                     struct device_attribute *attr, 
     74                                     char *buf) 
     75{ 
     76        struct led_classdev *led_cdev = dev_get_drvdata(dev); 
     77        struct usbdev_trig_data *td = led_cdev->trigger_data; 
     78 
     79        read_lock(&td->lock); 
     80        sprintf(buf, "%s\n", td->device_name); 
     81        read_unlock(&td->lock); 
     82 
     83        return strlen(buf) + 1; 
     84} 
     85 
     86static ssize_t usbdev_trig_name_store(struct device *dev, 
     87                                      struct device_attribute *attr, 
     88                                      const char *buf, 
     89                                      size_t size) 
     90{ 
     91        struct led_classdev *led_cdev = dev_get_drvdata(dev); 
     92        struct usbdev_trig_data *td = led_cdev->trigger_data; 
     93 
     94        if (size < 0 || size >= DEV_BUS_ID_SIZE) 
     95                return -EINVAL; 
     96 
     97        write_lock(&td->lock); 
     98 
     99        strcpy(td->device_name, buf); 
     100        if (size > 0 && td->device_name[size - 1] == '\n') 
     101                td->device_name[size - 1] = 0; 
     102 
     103        if (td->device_name[0] != 0) { 
     104                struct usb_device *usb_dev; 
     105 
     106                /* check for existing device to update from */ 
     107                usb_dev = usb_find_device_by_name(td->device_name); 
     108                if (usb_dev) { 
     109                        if (td->usb_dev) 
     110                                usb_put_dev(td->usb_dev); 
     111 
     112                        td->usb_dev = usb_dev; 
     113                        td->last_urbnum = atomic_read(&usb_dev->urbnum); 
     114                } 
     115 
     116                /* updates LEDs, may start timers */ 
     117                usbdev_trig_update_state(td); 
     118        } 
     119 
     120        write_unlock(&td->lock); 
     121        return size; 
     122} 
     123 
     124static DEVICE_ATTR(device_name, 0644, usbdev_trig_name_show, 
     125                   usbdev_trig_name_store); 
     126 
     127static ssize_t usbdev_trig_interval_show(struct device *dev, 
     128                                         struct device_attribute *attr, 
     129                                         char *buf) 
     130{ 
     131        struct led_classdev *led_cdev = dev_get_drvdata(dev); 
     132        struct usbdev_trig_data *td = led_cdev->trigger_data; 
     133 
     134        read_lock(&td->lock); 
     135        sprintf(buf, "%u\n", jiffies_to_msecs(td->interval)); 
     136        read_unlock(&td->lock); 
     137 
     138        return strlen(buf) + 1; 
     139} 
     140 
     141static ssize_t usbdev_trig_interval_store(struct device *dev, 
     142                                          struct device_attribute *attr, 
     143                                          const char *buf, 
     144                                          size_t size) 
     145{ 
     146        struct led_classdev *led_cdev = dev_get_drvdata(dev); 
     147        struct usbdev_trig_data *td = led_cdev->trigger_data; 
     148        int ret = -EINVAL; 
     149        char *after; 
     150        unsigned long value = simple_strtoul(buf, &after, 10); 
     151        size_t count = after - buf; 
     152 
     153        if (*after && isspace(*after)) 
     154                count++; 
     155 
     156        if (count == size && value <= 10000) { 
     157                write_lock(&td->lock); 
     158                td->interval = msecs_to_jiffies(value); 
     159                usbdev_trig_update_state(td); /* resets timer */ 
     160                write_unlock(&td->lock); 
     161                ret = count; 
     162        } 
     163 
     164        return ret; 
     165} 
     166 
     167static DEVICE_ATTR(activity_interval, 0644, usbdev_trig_interval_show, 
     168                   usbdev_trig_interval_store); 
     169 
     170static int usbdev_trig_notify(struct notifier_block *nb, 
     171                              unsigned long evt, 
     172                              void *data) 
     173{ 
     174        struct usb_device *usb_dev; 
     175        struct usbdev_trig_data *td; 
     176 
     177        if (evt != USB_DEVICE_ADD && evt != USB_DEVICE_REMOVE) 
     178                return NOTIFY_DONE; 
     179 
     180        usb_dev = data; 
     181        td = container_of(nb, struct usbdev_trig_data, notifier); 
     182 
     183        write_lock(&td->lock); 
     184 
     185        if (strcmp(dev_name(&usb_dev->dev), td->device_name)) 
     186                goto done; 
     187 
     188        if (evt == USB_DEVICE_ADD) { 
     189                usb_get_dev(usb_dev); 
     190                if (td->usb_dev != NULL) 
     191                        usb_put_dev(td->usb_dev); 
     192                td->usb_dev = usb_dev; 
     193                td->last_urbnum = atomic_read(&usb_dev->urbnum); 
     194        } else if (evt == USB_DEVICE_REMOVE) { 
     195                if (td->usb_dev != NULL) { 
     196                        usb_put_dev(td->usb_dev); 
     197                        td->usb_dev = NULL; 
     198                } 
     199        } 
     200 
     201        usbdev_trig_update_state(td); 
     202 
     203done: 
     204        write_unlock(&td->lock); 
     205        return NOTIFY_DONE; 
     206} 
     207 
     208/* here's the real work! */ 
     209static void usbdev_trig_timer(unsigned long arg) 
     210{ 
     211        struct usbdev_trig_data *td = (struct usbdev_trig_data *)arg; 
     212        int new_urbnum; 
     213 
     214        write_lock(&td->lock); 
     215 
     216        if (!td->usb_dev || td->interval == 0) { 
     217                /* 
     218                 * we don't need to do timer work, just reflect device presence 
     219                 */ 
     220                if (td->usb_dev) 
     221                        led_set_brightness(td->led_cdev, LED_FULL); 
     222                else 
     223                        led_set_brightness(td->led_cdev, LED_OFF); 
     224 
     225                goto no_restart; 
     226        } 
     227 
     228        if (td->interval) 
     229                new_urbnum = atomic_read(&td->usb_dev->urbnum); 
     230        else 
     231                new_urbnum = 0; 
     232 
     233        if (td->usb_dev) { 
     234                /* 
     235                 * Base state is ON (device is present). If there's no device, 
     236                 * we don't get this far and the LED is off. 
     237                 * OFF -> ON always 
     238                 * ON -> OFF on activity 
     239                 */ 
     240                if (td->led_cdev->brightness == LED_OFF) 
     241                        led_set_brightness(td->led_cdev, LED_FULL); 
     242                else if (td->last_urbnum != new_urbnum) 
     243                        led_set_brightness(td->led_cdev, LED_OFF); 
     244        } else { 
     245                /* 
     246                 * base state is OFF 
     247                 * ON -> OFF always 
     248                 * OFF -> ON on activity 
     249                 */ 
     250                if (td->led_cdev->brightness == LED_FULL) 
     251                        led_set_brightness(td->led_cdev, LED_OFF); 
     252                else if (td->last_urbnum != new_urbnum) 
     253                        led_set_brightness(td->led_cdev, LED_FULL); 
     254        } 
     255 
     256        td->last_urbnum = new_urbnum; 
     257        mod_timer(&td->timer, jiffies + td->interval); 
     258 
     259no_restart: 
     260        write_unlock(&td->lock); 
     261} 
     262 
     263static void usbdev_trig_activate(struct led_classdev *led_cdev) 
     264{ 
     265        struct usbdev_trig_data *td; 
     266        int rc; 
     267 
     268        td = kzalloc(sizeof(struct usbdev_trig_data), GFP_KERNEL); 
     269        if (!td) 
     270                return; 
     271 
     272        rwlock_init(&td->lock); 
     273 
     274        td->notifier.notifier_call = usbdev_trig_notify; 
     275        td->notifier.priority = 10; 
     276 
     277        setup_timer(&td->timer, usbdev_trig_timer, (unsigned long) td); 
     278 
     279        td->led_cdev = led_cdev; 
     280        td->interval = msecs_to_jiffies(50); 
     281 
     282        led_cdev->trigger_data = td; 
     283 
     284        rc = device_create_file(led_cdev->dev, &dev_attr_device_name); 
     285        if (rc) 
     286                goto err_out; 
     287 
     288        rc = device_create_file(led_cdev->dev, &dev_attr_activity_interval); 
     289        if (rc) 
     290                goto err_out_device_name; 
     291 
     292        usb_register_notify(&td->notifier); 
     293        return; 
     294 
     295err_out_device_name: 
     296        device_remove_file(led_cdev->dev, &dev_attr_device_name); 
     297err_out: 
     298        led_cdev->trigger_data = NULL; 
     299        kfree(td); 
     300} 
     301 
     302static void usbdev_trig_deactivate(struct led_classdev *led_cdev) 
     303{ 
     304        struct usbdev_trig_data *td = led_cdev->trigger_data; 
     305 
     306        if (td) { 
     307                usb_unregister_notify(&td->notifier); 
     308 
     309                device_remove_file(led_cdev->dev, &dev_attr_device_name); 
     310                device_remove_file(led_cdev->dev, &dev_attr_activity_interval); 
     311 
     312                write_lock(&td->lock); 
     313 
     314                if (td->usb_dev) { 
     315                        usb_put_dev(td->usb_dev); 
     316                        td->usb_dev = NULL; 
     317                } 
     318 
     319                write_unlock(&td->lock); 
     320 
     321                del_timer_sync(&td->timer); 
     322 
     323                kfree(td); 
     324        } 
     325} 
     326 
     327static struct led_trigger usbdev_led_trigger = { 
     328        .name           = "usbdev", 
     329        .activate       = usbdev_trig_activate, 
     330        .deactivate     = usbdev_trig_deactivate, 
     331}; 
     332 
     333static int __init usbdev_trig_init(void) 
     334{ 
     335        return led_trigger_register(&usbdev_led_trigger); 
     336} 
     337 
     338static void __exit usbdev_trig_exit(void) 
     339{ 
     340        led_trigger_unregister(&usbdev_led_trigger); 
     341} 
     342 
     343module_init(usbdev_trig_init); 
     344module_exit(usbdev_trig_exit); 
     345 
     346MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>"); 
     347MODULE_DESCRIPTION("USB device LED trigger"); 
     348MODULE_LICENSE("GPL v2"); 
  • target/linux/generic-2.6/patches-2.6.32/403-ledtrig-usbdev.patch

    a b  
     1--- a/drivers/leds/Kconfig 
     2+++ b/drivers/leds/Kconfig 
     3@@ -326,4 +326,11 @@ config LEDS_TRIGGER_NETDEV 
     4          This allows LEDs to be controlled by network device activity. 
     5          If unsure, say Y. 
     6  
     7+config LEDS_TRIGGER_USBDEV 
     8+       tristate "LED USB device Trigger" 
     9+       depends on USB && LEDS_TRIGGERS 
     10+       help 
     11+         This allows LEDs to be controlled by the presence/activity of 
     12+         an USB device. If unsure, say N. 
     13+ 
     14 endif # NEW_LEDS 
     15--- a/drivers/leds/Makefile 
     16+++ b/drivers/leds/Makefile 
     17@@ -44,3 +44,4 @@ obj-$(CONFIG_LEDS_TRIGGER_GPIO)               += ledt 
     18 obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON)  += ledtrig-default-on.o 
     19 obj-$(CONFIG_LEDS_TRIGGER_MORSE)       += ledtrig-morse.o 
     20 obj-$(CONFIG_LEDS_TRIGGER_NETDEV)      += ledtrig-netdev.o 
     21+obj-$(CONFIG_LEDS_TRIGGER_USBDEV)      += ledtrig-usbdev.o