|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" m3 h+ \$ i0 |1 D/ u: r3 ?- L5 A
#include <linux/init.h>5 {6 ~# k* l3 h: ?9 o t+ B( Q) f
#include <linux/module.h>5 ~: j3 {+ i% |9 t
#include <linux/kernel.h>" p. P$ F' \: {, \! I. a* o
#include <linux/types.h>
" J# b$ \- }3 T: {+ L: B- R#include <linux/gpio.h>
. ^8 r+ n' n1 ^7 k8 L, q#include <linux/leds.h>4 z$ q3 S% v" _% Q5 r
#include <linux/platform_device.h>
# d1 c, V, D* q" ]3 z! H
8 H# ]/ {4 j8 a4 r#include <asm/mach-types.h>2 B, N! y" z& B4 q) `
#include <asm/mach/arch.h># M# n! M7 w" {! y4 p
#include <mach/da8xx.h>' \+ I# p; n1 t- a$ d
#include <mach/mux.h>( g' c4 b5 M# d c+ Q( f7 D
# w* s2 i4 I7 C( |% W% W9 m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. I& }3 e9 h, Y+ ~2 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, i( E! ]: k. m8 b1 S#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 W# y4 @* Q* m8 C+ X2 q! Z, Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- S$ R6 ]5 }8 t9 t" T' A3 ~3 a' W7 `4 V0 b; T3 ]
/* assign the tl som board LED-GPIOs*/, Y# k* d1 S* E0 K: N5 h9 [3 j
static const short da850_evm_tl_user_led_pins[] = {
) g( _$ C% k4 s# C /* These pins are definition at <mach/mux.h> file */3 W/ W2 V; D! e c: N, R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; p+ ~$ d O; x9 C' d -1) ~7 `9 a2 V1 U5 L+ l; G1 G
};
- [/ H. B1 n' H% O5 W' K4 _
( L7 a# r' Y( \# Pstatic struct gpio_led da850_evm_tl_leds[] = {2 S" P9 A% o) ^+ m9 w* v# M8 Z
{
' s* z" T( s. _ .active_low = 0,# i+ n B- I v3 J M% @4 T
.gpio = DA850_USER_LED0,7 V' _& u' v7 a% x( s' Y
.name = "user_led0"," b( h% V5 e! X! P. D
.default_trigger = "default-on",! z0 W$ o$ Z/ M, z3 N/ }1 S2 f5 G
},
h% s1 O0 k/ Q7 c: P8 }. M {
* b+ G7 n0 X: n* I9 ?! w/ l+ C- v .active_low = 0,
. x! s1 F2 u) m. i( q .gpio = DA850_USER_LED1,
c- O% D& f, X- @ .name = "user_led1",
' j4 D) A }; S$ L. X3 j* r .default_trigger = "default-on",% l5 c& X" L9 E) @! Z4 z
},
$ Z& w( k# {6 e6 E$ n* v {
7 H$ X3 y U( h$ [( [; i: t* j .active_low = 0,$ O& \, q. R; |: L
.gpio = DA850_USER_LED2,6 \% P. Q; N( g- Q5 }
.name = "user_led2",' p" e* J# U# D$ m M) ?+ `$ U
.default_trigger = "default-on", j0 m9 k+ U N( J7 h
},
7 G4 g$ o7 G* z {" p8 g u& p1 d
.active_low = 0," E; [3 a0 k" B) I
.gpio = DA850_USER_LED3,7 p- N0 X g# D4 W) v3 n
.name = "user_led3",* x7 \; l& s$ z* v# X+ Z8 x
.default_trigger = "default-on",
* e9 K- B1 c" e% N4 ?. O% d },- n) B3 Z9 K# B( J
};
$ ]+ I$ J) ~3 O" D7 D% N* F' \% x' B) d( ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 r7 x$ A9 |& B" Q, |( I1 x- D .leds = da850_evm_tl_leds,
) z u! S& g% N5 |: a7 |7 c# ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) t( ]! p- Z) g1 m3 }3 g( Q};( ?9 s `0 z B: v
; f$ w+ M7 w j# c5 o8 Fstatic void led_dev_release(struct device *dev)
; Z! ]% P) l9 p. e) M{
# s7 d2 e& H E6 y};
* L- Q6 M+ s- \
; E$ R9 w: C2 I7 |/ H( h+ e! sstatic struct platform_device da850_evm_tl_leds_device = {0 B% @1 S6 t0 e0 R
.name = "leds-gpio",1 ~) j" n. F n- D/ d9 m
.id = 1, o& Z( D* a7 u
.dev = {
1 D% h) F+ q. @6 Z- C1 ` .platform_data = &da850_evm_tl_leds_pdata,; E& ^' N( o( |) j1 n$ |5 X
.release = led_dev_release,, H- d% w/ k* r6 u0 b; ^9 U8 m
}
( D4 X, q# s O" U, y& V) S};# s+ |+ o6 ?2 A) {
! Q0 h% \$ a& S3 ~" i* e- V
static int __init led_platform_init(void)
: R, L) i8 |8 b{
) }5 e: S" r, x int ret;6 e3 r* W v% l2 M% Y
#if 0
: M: z2 q0 |. R4 z+ t- _% \& c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 c% S; n D% i# a$ Q, w
if (ret)0 t2 h" ?7 ?5 g1 {8 s. w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* N) P. s# ^8 ]6 b
"%d\n", ret);4 G% l- K& @5 p) j& b. a
#endif1 o5 Q/ T" W J6 Z
ret = platform_device_register(&da850_evm_tl_leds_device);; ^* O0 |! y& f
if (ret)
+ M( d! {* a/ v1 v5 v# \ pr_warning("Could not register som GPIO expander LEDS");
) j$ ?6 c0 Y/ h$ o* w else
" S- k! ]5 _7 g3 A8 W; @ printk(KERN_INFO "LED register sucessful!\n");
; i% t; }$ C3 z4 S8 R: L/ h9 L" V
+ ?' c! J% k: V( r return ret;- }1 t: C9 D. n% Q
}6 A" x6 U; \# e2 [6 t- n1 i/ |
3 H) d1 a/ _$ t3 I+ @3 }$ @! xstatic void __exit led_platform_exit(void)
- [8 f% a( T0 i) N: v{
7 W/ y- _) k9 l( ~2 e platform_device_unregister(&da850_evm_tl_leds_device);# F+ a1 q$ a @8 k3 b: h8 U; ^" f
3 y$ E6 p, V$ P$ |$ R
printk(KERN_INFO "LED unregister!\n");
6 a# o% S7 A5 f6 N$ D6 U: W}7 B% h: k* ?! U6 a' y
9 e& N. Y( r9 k
module_init(led_platform_init);6 I" _0 H+ j1 S, N% L4 o Y5 j3 p4 j
module_exit(led_platform_exit);
% Q( e6 m# O( O% u# H- Q; O6 ?, b/ A! e# [. `$ Z; v
MODULE_DESCRIPTION("Led platform driver");
+ }% O5 W$ w6 x2 q: d. pMODULE_AUTHOR("Tronlong");
, R, H! V, u7 ]$ S4 c7 SMODULE_LICENSE("GPL");
; _0 x8 d8 w0 D! b% Z5 [; ]( d+ r! @& e5 l5 m9 B3 Y
|
|