|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& Z+ u# G# x- m' p2 B$ n
#include <linux/init.h>
& y2 H: Y3 a# K+ x% g#include <linux/module.h>
1 z: W; U# v2 b* B9 Q/ @1 K#include <linux/kernel.h>
- a$ h2 P* q9 h4 ]8 s0 i% i! s#include <linux/types.h>
$ n% Y6 {& J) a6 m& }4 u#include <linux/gpio.h>
0 W9 e( Y: r1 R- t#include <linux/leds.h>6 x& P; o6 o- |9 \ L
#include <linux/platform_device.h>9 c0 r) L" e6 x( ~* N; Y: v9 c
( @; j% F3 X) D+ r
#include <asm/mach-types.h>
# ?. G/ Y1 I, }#include <asm/mach/arch.h>
. D$ y- F4 b# R7 y8 y#include <mach/da8xx.h>% |! M2 ~: ] w( I
#include <mach/mux.h>
0 _# t4 c N0 g0 R6 S. d" C3 I9 Y1 B4 @) z2 i5 k8 V# E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' g5 B3 c: g$ D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 e; G1 R* F: Y+ _2 J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& @# L& q. \; e& M3 @" n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 o e: P. q3 x, ?1 D# \ F" o8 y
: \0 D+ }7 ?" z3 [; r3 S" m' E/* assign the tl som board LED-GPIOs*/
" X( Y( G& L3 w" Estatic const short da850_evm_tl_user_led_pins[] = {
$ s/ d/ ~: ~1 H. o2 n! B8 W' a0 n /* These pins are definition at <mach/mux.h> file */6 u% W% B; P. _. H, Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 x. y6 Y. j+ O6 s. u- |$ O4 {
-1
3 X" ]6 x4 ~9 t};- ?0 I4 k" U5 L) z! C6 P' |
v; V# G' |1 }5 t& E+ O: l; ~; i! gstatic struct gpio_led da850_evm_tl_leds[] = {9 i1 \* j7 g. w6 x z( l$ L* B" W; \
{
4 `: k) C7 }+ J! I .active_low = 0,2 F- X% z# N% W( c: T8 z+ m
.gpio = DA850_USER_LED0,
8 U2 v5 d9 l, g" [ .name = "user_led0",' U# Z) D# W/ i( n3 c! Y
.default_trigger = "default-on",! y2 O: R; ~' ~% S3 E& g
},) \: E T. F" }; z. }7 F) `
{
8 j/ ]' L; K# g" k .active_low = 0,
( Q0 J. [3 [% a0 f .gpio = DA850_USER_LED1,
& ]: b% R1 q/ k% ?& G% d! e .name = "user_led1",
, D, U4 r6 h3 w5 x6 d' \% X. q/ t1 ~ .default_trigger = "default-on",
" T$ ]" O% i' C! R" h7 @- h. l2 p },: b& A. b: |4 d4 d" n# `
{
# M" y1 e2 C4 Z" A .active_low = 0,
6 t% R" H+ Q( g9 ~ .gpio = DA850_USER_LED2,
: U7 ~/ v/ _# K. ~/ ? .name = "user_led2",
. Z$ n ]6 X. {# H .default_trigger = "default-on",' }) q# J; Y3 F7 l9 P9 G. ]# v
},$ x4 V( C8 q$ _; k4 L+ L
{
: C4 `$ X: G) i+ Y7 B3 R2 G: X+ t! G .active_low = 0,9 R6 R$ ]* f& w% b2 m1 W Q
.gpio = DA850_USER_LED3,) l, Y9 `* V4 N5 W! E
.name = "user_led3",
9 U6 `+ |8 n' d6 L" }% I. \ .default_trigger = "default-on",
4 h$ W0 N: x' }. I },
) E& [3 S0 v- A; {2 f6 {};# o6 K o6 q6 W. q7 c9 x) Q
# G f8 M+ n: l% p/ z" \5 a# W* ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! D9 w' u0 P9 K7 P0 O$ N .leds = da850_evm_tl_leds,
: y7 m5 o3 k" U2 P% } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, A1 S; n: B& N! W7 Y};3 L' u2 {3 `' C0 F2 B' d
% {0 x7 s+ ~) H
static void led_dev_release(struct device *dev)" D" \0 o9 [% O3 [, N# N
{# i2 P* j0 n+ X: p. n. T2 [
}; ?) I& K: _/ n
$ F5 u- n j, U+ W+ J9 Wstatic struct platform_device da850_evm_tl_leds_device = {* y4 d1 O4 i! ~" c1 `
.name = "leds-gpio",
, ^! X9 V7 f9 c; b) ]3 H. m0 Y .id = 1,
2 P+ p n" ?3 W, R .dev = {
C" ^3 q# a% A! m .platform_data = &da850_evm_tl_leds_pdata,
# @, K6 @1 D5 B: n9 ^+ O .release = led_dev_release,; c. E7 \1 }- }4 R& W
}
8 I% m- I) e9 u5 @: a};5 I0 s2 c& T+ `2 O8 p2 P% i% s
5 D f* a; p1 C5 \
static int __init led_platform_init(void)
9 n& ^7 b' X. e3 t{
. T3 P/ t0 X+ v$ P! n: T9 H( E int ret;1 Q$ s: Y# b5 e
#if 0' ?( _# S+ V' s( G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 k3 \+ p2 l# p, v) i2 Q, w3 M( I
if (ret): P5 ]" Y' G# f* [* j1 N/ \* m0 k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 J/ E( D- j3 Y "%d\n", ret);
" ?' c4 V0 s' p' ?#endif
8 {$ H+ P: c# P ret = platform_device_register(&da850_evm_tl_leds_device);
5 O4 o! v8 h* f: i1 v if (ret)
0 ?5 v" [) O9 o9 ^- j pr_warning("Could not register som GPIO expander LEDS");
2 n8 b: b; d0 l else
% @ i) ?8 j8 @$ M3 e printk(KERN_INFO "LED register sucessful!\n");
) h% U g" c2 ~5 O
5 l4 c4 [2 A' h2 F3 R3 |" Y return ret;
' p+ H+ K1 }5 ^* O+ b2 P9 V}
) P( c3 j3 g9 S, r p$ V: W! m% z9 A9 u p# y! p# K& f& m$ Y
static void __exit led_platform_exit(void)
3 r1 @. B% }5 e{9 b; {2 S/ W6 B b7 l
platform_device_unregister(&da850_evm_tl_leds_device);$ D$ a5 ?3 z; ?0 C) S% _6 \
7 Y! \. j6 W; V" Y8 Y. d r' M
printk(KERN_INFO "LED unregister!\n");/ c0 V: W$ ]" x2 d* K
}
$ b( ]+ t0 t8 i) i! D8 f
G2 e" \5 |+ q! i9 zmodule_init(led_platform_init);
x9 @( s# j: x3 `; I, C: p4 tmodule_exit(led_platform_exit);
2 _: l! }4 U9 Y' w' |; N5 G3 W9 p1 w- U( Y$ d$ i
MODULE_DESCRIPTION("Led platform driver");6 @) Z7 v6 A; J' A/ {
MODULE_AUTHOR("Tronlong");- n% a+ c* ~) B( _7 V
MODULE_LICENSE("GPL");
" t% D1 [- x X m. X( S4 H% u8 @6 |5 c( s n2 a! r
|
|