|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; Y5 ^) V5 x4 r4 r+ P q8 \
#include <linux/init.h>8 W8 w7 g, _3 H
#include <linux/module.h>
" o* k) }/ f) v" }( C+ W8 \: z#include <linux/kernel.h>/ E) Q; k) {% o6 s
#include <linux/types.h>) C) H8 g2 x( [$ z
#include <linux/gpio.h>
& C# L. \# y2 K#include <linux/leds.h>' `* C1 u+ Y% k8 E) ~
#include <linux/platform_device.h>
9 \( q* O: w$ W: {% O6 E9 @1 M- b& K! S, ]* B2 `& K
#include <asm/mach-types.h> i8 X* j" l: |" d; U4 |3 b' v+ b, W" z
#include <asm/mach/arch.h>; ^9 E7 t8 F, T& j) l3 `
#include <mach/da8xx.h>* l6 v0 V1 R& I! R) S
#include <mach/mux.h>
, s+ b% |2 Y8 y. j0 g) j; j9 @" F* P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' g* Y* V/ Y; H" F1 V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ k S2 E, A5 w; F5 R% {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 E1 Y4 }8 `2 {0 q& J5 [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 K8 R0 R3 E! s; }4 T
6 o" }5 u/ g3 w) h+ s7 S
/* assign the tl som board LED-GPIOs*/ q0 z- K2 D7 T4 E1 V! w2 C+ k
static const short da850_evm_tl_user_led_pins[] = {7 F2 |: {6 X% V |# P
/* These pins are definition at <mach/mux.h> file */
' h% W6 E- |. @2 B DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, G, m& ~/ }/ S5 A, B
-10 l& t+ |, r4 L; ?0 C* X Q
};% c# t9 \ l1 K- R0 [
+ ^6 r/ o! [( q# d+ O
static struct gpio_led da850_evm_tl_leds[] = {7 z+ Z+ l' ?; P+ P% Y6 B
{
# \+ k8 x$ W8 D4 O4 h. G& S/ ] .active_low = 0,& r0 |5 ?* e" K: P# [
.gpio = DA850_USER_LED0,6 }2 ^7 i% |. x# h- n2 S( [/ u% b
.name = "user_led0",
0 D5 t7 E1 Q2 t' h7 ] .default_trigger = "default-on",* x0 h8 e& }/ v7 q# |
},* V U- g9 e* j" a
{
/ j7 l' O- [2 w8 [: k/ o .active_low = 0,
3 {8 P: q$ U0 q. \% D .gpio = DA850_USER_LED1,
/ \, y4 ~8 A1 g, j .name = "user_led1",- H t9 L3 ~2 {4 V
.default_trigger = "default-on",5 P; V( h' b- ?- i# z8 M* w+ ?
},1 e: M5 f" p/ F$ s0 c( r. \
{
) @( U- M: _9 t( u' ^4 G/ v .active_low = 0,
C# g4 T5 j& n; o .gpio = DA850_USER_LED2,
/ a: G/ s% |$ T .name = "user_led2",
. o. y3 J4 X5 V' G .default_trigger = "default-on",
0 o1 L" ]/ G* ^& b* K* }( c },8 W- _, u3 T2 N: _- U2 C1 `
{
6 K7 l5 J/ l G' E0 d7 R .active_low = 0,2 \: d+ b- g' D" r( |
.gpio = DA850_USER_LED3,
6 i$ p( X \- A& J6 v .name = "user_led3",& }+ ]. ]3 E w6 A0 ?) s
.default_trigger = "default-on",
2 f& s! V `* H7 m$ `1 m },& S, o. V% U- j( s8 |
};
* {7 j" _+ q1 A& X/ b# j- i7 r) r4 _0 j2 X7 M7 ]( T' `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 j+ W6 ]+ X% [, K2 D# g
.leds = da850_evm_tl_leds,
& B6 ]" Y% E% U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 e, q! W. _9 Z# N};! p1 r: ] d* u: {
T" P. z2 ]& ~8 d, M
static void led_dev_release(struct device *dev)
X V+ u) w" g; G/ G( G{
) k/ [5 ], e$ T; W. j' j/ z8 D};* k2 A+ }( Y" C
% H6 u1 K( {9 O/ s% M2 _
static struct platform_device da850_evm_tl_leds_device = {- h2 i4 M0 J' U; C- L$ C; v
.name = "leds-gpio",
, t Q. e' Y) \+ `, O3 x+ q .id = 1,' M1 j' ? _& B+ x9 ^
.dev = {
4 \$ \0 C y! ?" H .platform_data = &da850_evm_tl_leds_pdata,# j" n2 N% |4 A
.release = led_dev_release,
' y$ Z1 o$ T" s# V) l }
) @( T/ O4 P1 j# R};! ]! y+ S, \7 c- z$ ]: l
) N# _2 X& n* `6 x/ J% z* G. [static int __init led_platform_init(void)
& _) F" l: ]) F/ B3 W{1 G; h N$ n0 }" Q
int ret;6 J; w0 O, Z) l! e3 o+ r# d7 z
#if 0# Q" O1 H4 O1 Z* A; N. v: `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" u/ W- P+ T9 R q
if (ret)' H9 {" x: G- S, m" n- a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( _3 j0 E/ J8 s( `9 ~9 Y
"%d\n", ret);9 L/ o3 d4 D# U( v) Y' Y$ F+ J
#endif% h! Z% w. r2 Z5 q
ret = platform_device_register(&da850_evm_tl_leds_device);
6 c+ G! s$ o" d& {, ~" c3 [ if (ret)
# I( ~6 a! A0 E pr_warning("Could not register som GPIO expander LEDS");
/ ]4 O0 v) @& i# V else) P( C4 s# L3 W' C! Q: ?
printk(KERN_INFO "LED register sucessful!\n");
" s/ _8 k* b9 ?! y8 n
& ?+ B5 n7 o3 w; X( U& I return ret;
5 w+ x7 O9 R! Y% o( W}5 b, Q1 U: e; k
# j9 L2 ]; {0 Y
static void __exit led_platform_exit(void) \; f3 `) r- J3 }2 Y/ _' M
{
Y3 N# E" ?' |* N2 f) } platform_device_unregister(&da850_evm_tl_leds_device);0 @- _/ T; k3 W5 i& v6 j
* ~0 F; R9 }. a2 r. f7 i
printk(KERN_INFO "LED unregister!\n"); J1 Y% R+ }7 S4 |# Q, ~
}
5 P; ^9 {# t' L/ h
3 W1 m: k [' M+ v! amodule_init(led_platform_init);$ V- K- t9 C) E: i5 ?+ _1 I& y
module_exit(led_platform_exit);
$ @$ U, o. U: X J% n. @4 C: Q5 K* D$ E& E$ ?: a1 _) w' `6 z% s
MODULE_DESCRIPTION("Led platform driver");
, Z! `$ G2 F" y( c4 \( m" c" m4 XMODULE_AUTHOR("Tronlong"); W! L" q& S5 V
MODULE_LICENSE("GPL");
8 E& l1 x0 ~2 R" a* L2 a& t% Z7 m. n- l% T2 a! g
|
|