|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 _$ O2 S, I8 W v5 q* u#include <linux/init.h>! y& J" A2 a2 U
#include <linux/module.h>/ L) j. _( L9 e( L* c( d) J7 U, m: l
#include <linux/kernel.h>
1 ?4 k. M$ |5 y8 J# z#include <linux/types.h>
* D. O# g9 C8 U* a. Y#include <linux/gpio.h>
# Q: w! s& L% W N# E#include <linux/leds.h>7 q# Y% O! G/ x2 c- ~
#include <linux/platform_device.h>4 P! w0 O- A' w Z: c
& R8 f B* p3 \7 c
#include <asm/mach-types.h>3 b$ K m( h& f0 Y
#include <asm/mach/arch.h>% M* j7 U: O/ f8 @
#include <mach/da8xx.h>
6 e/ p& J8 d4 f1 B; s Q! H#include <mach/mux.h>
+ x/ G; A. X5 |
+ g5 G# Y. b6 j8 J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( F% r" I, q, e& t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 {5 A+ S( d" v7 C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 O) p( x+ F# L! s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: n5 ?' v2 h+ d% x& v8 Z N5 q5 G5 Q+ V( w; N9 }0 \
/* assign the tl som board LED-GPIOs*/
7 A8 {. H& A3 N; D) o* Y: Z1 Zstatic const short da850_evm_tl_user_led_pins[] = {
: m: Q" N) a/ t0 z /* These pins are definition at <mach/mux.h> file */0 a, _. \9 s# A- Y2 s9 g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# _5 K0 l* P$ ?5 T$ F; a" Q -14 L) A7 Q( n2 F; ^
};
, _: l2 ]1 M O% ]/ e ]$ u. P% r' f
static struct gpio_led da850_evm_tl_leds[] = {
& Z* d* O% \, }; I# _ {/ z$ \. @- t- Z/ @7 J
.active_low = 0,9 T% H/ g2 w( R2 D( F6 v f# R
.gpio = DA850_USER_LED0,
% O, o8 Y" z' Q, q, F* W9 ^% h7 l4 @ J .name = "user_led0",
! G! T! j3 Y7 A! q2 \; C .default_trigger = "default-on",
; J: a+ |# T# ?# x+ V2 P% } },! ?1 I# O7 i, c) l5 ~0 m3 z
{
2 _2 v. X, W+ }. s .active_low = 0,
6 q! D# T8 B* {( F: n4 I .gpio = DA850_USER_LED1,( c8 T x4 ?, U
.name = "user_led1",
# @: L1 z9 w; v .default_trigger = "default-on",3 _) z" y* b/ B. ^1 ]
},
6 a2 K/ C, V. B F* K! J4 z {
) _* V% s! F( h2 w4 _ .active_low = 0,
5 G: U% a" q! Q' u .gpio = DA850_USER_LED2,' v: J$ a/ `6 O6 J
.name = "user_led2", ]. q" H( h1 J( h
.default_trigger = "default-on",
1 ~: l8 E; D2 U# g },
& e8 H( J9 ], L5 ]' g {
$ {5 J- u, f0 |# c) W% e .active_low = 0,
5 p8 c3 T& }) Q3 v& P; P .gpio = DA850_USER_LED3,
8 n) a1 N# P- p/ Z/ y .name = "user_led3",
7 W6 x9 L0 N8 f6 S9 s9 e, l5 s .default_trigger = "default-on",
+ q5 `2 p. }! { s },: P4 C# S& C/ M) p8 Q- V: d
};' x+ @! u. y& [ H) `6 y
/ i/ y# _, D4 ?6 sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& C4 \& J t6 o! W" V! Z
.leds = da850_evm_tl_leds,
) o: x! m8 \9 }1 b% j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ ^; g! q; j) o2 Z};
* u0 o9 I5 M7 W. F/ N$ F% w: I
) v% P& r& H v' J5 L& y6 @; Xstatic void led_dev_release(struct device *dev)
. ~4 z; A: e" g% E{
# e* y6 d; s5 |. { W' W( x};
, H% i, ?7 N0 U1 m: x7 N) C! Z3 v2 k7 Y! i
static struct platform_device da850_evm_tl_leds_device = {
) [% j7 {) L* e$ D6 j% K- | .name = "leds-gpio",
4 z0 I. E G' P5 q* b7 X" A .id = 1,
7 g& \9 v. |' A. U2 [* A0 n! X" W .dev = {( l0 H" U$ E0 H; H
.platform_data = &da850_evm_tl_leds_pdata,
3 s$ \' s. l* H6 D/ k .release = led_dev_release,
9 u: h* U$ j- l, p2 d }0 G6 K- s# H! M4 p/ f
};! J* Y. S. Q; o l0 q
0 S6 j' `# A. N* Z* [) X9 p
static int __init led_platform_init(void)
/ H: Z% @: p1 c1 j5 q{" l4 O, \4 c m$ S! R" H, {8 I, h6 P6 J4 E
int ret;
+ R+ C; P' g% M+ ~( Z5 C#if 0
0 D/ y0 X) T7 B: U K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 v/ S' X9 K; D; G$ A if (ret)
1 s" Z2 ^: H2 m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* d# K: O# O! n+ c+ N "%d\n", ret);2 P; j8 L1 y6 F! E
#endif* U _+ t8 J& W5 N. j7 [. P* O/ k
ret = platform_device_register(&da850_evm_tl_leds_device);( w* S: h* A: I6 A% G9 y- Q
if (ret). o }) A6 g3 a# ?' k
pr_warning("Could not register som GPIO expander LEDS");3 V5 [$ U+ J, T
else
+ v& u. B6 r' Y printk(KERN_INFO "LED register sucessful!\n");
& i1 ?8 D7 ~$ `/ J' X
0 M7 j8 O# m- t/ q/ h/ b, m return ret;
0 }. k D& h. p& t) ]6 m: W}7 J& A! a0 K/ t6 O: R1 A( t- L
' A7 o0 o1 g# @; r& gstatic void __exit led_platform_exit(void)
& c6 y0 g; G8 ]0 E5 n{
9 Z5 A1 h8 i) n* a" J' Y; w4 O platform_device_unregister(&da850_evm_tl_leds_device);
2 k X4 j4 O) F/ Y$ l" E4 a. S/ e3 M' m9 P& o# Y9 T- f& U. f
printk(KERN_INFO "LED unregister!\n");( N9 `5 c1 d2 V! Y I8 s3 `
}
: V! S* Q' @. V7 m3 E/ R5 F+ `& s2 ]# g$ c+ ]9 O7 m3 H2 i$ m
module_init(led_platform_init);7 z" @* x, t$ k. r" e/ @
module_exit(led_platform_exit);
1 H4 g' y1 u; ?3 M- i6 c! O7 h6 G; i0 d" {1 n; o- Z4 i" O
MODULE_DESCRIPTION("Led platform driver");2 S% b5 q& q; E1 w( O9 W
MODULE_AUTHOR("Tronlong");: u j5 {/ M: Q9 O2 p) T. U0 [
MODULE_LICENSE("GPL");
$ _) m$ M+ Q1 {
9 |9 ]% A, C6 N6 m! k3 W9 Q |
|