|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, A) r; u$ T$ @5 h; f#include <linux/init.h>
. i; y3 s' P' k: `5 {& ?3 ]' i#include <linux/module.h>0 i" b" k- u1 Q: y& Y8 N$ w: Q
#include <linux/kernel.h>
6 J4 W* t1 V9 h9 H; k! W#include <linux/types.h>
# ?1 m! M2 i+ X#include <linux/gpio.h>
+ K: W$ n! P% T; s# }/ w8 s#include <linux/leds.h>4 B2 F$ I* J2 @2 |2 J6 G! E
#include <linux/platform_device.h>& R8 Z) I7 g1 C: K
# z7 e. l, W6 j* ^; F+ c1 c
#include <asm/mach-types.h>
2 M7 T, n0 O( t' C9 \0 m- j7 M$ N#include <asm/mach/arch.h>( {, D3 J5 Z# I) E$ H" T7 y; s& ~. |+ c+ K
#include <mach/da8xx.h>
" p2 V- D# r8 f5 a4 ^; j( X#include <mach/mux.h>
1 r* Y3 k2 t1 h# W; x8 z% U$ F( N2 | J& @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) v+ {* f$ E7 q: K% Y" G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 Z# `" l, U) C! E6 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 J9 q+ J) ^8 L, V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% t9 u4 G. f1 {
8 W, N \2 z% I2 W/* assign the tl som board LED-GPIOs*/5 h Y6 ^7 F' T6 _" y( a8 e
static const short da850_evm_tl_user_led_pins[] = {2 H/ K8 @ V6 ?& D, i5 O
/* These pins are definition at <mach/mux.h> file */9 c Q& v6 \0 b9 F4 q9 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, x5 t! @- L5 f* d$ u4 F& y% f7 V -1
$ l1 k- b) h( N/ B, [" W};. o# a# _& ^* a; }4 A
9 @* j8 ?. x0 X( X( c
static struct gpio_led da850_evm_tl_leds[] = {
) j p; o8 m( |5 X {; a* H- C- X# O9 z& n
.active_low = 0,: f9 o2 k* d; b2 E( u; D0 r
.gpio = DA850_USER_LED0,
5 h# R" Q: m. w% S& w .name = "user_led0",4 |! G- g0 S( C J; ]* B' U. O
.default_trigger = "default-on",5 h' A/ z/ T5 N/ _1 Z& Q: ]& V# C
},
( ~* r) m0 L4 w& U& x& [! L1 M {, X# X& g1 Q. E
.active_low = 0,
4 ?& | A, j( s .gpio = DA850_USER_LED1,2 z% |2 T# l6 ~7 j! \
.name = "user_led1",& i, F# t6 a' ]( u
.default_trigger = "default-on",
4 Q- y( o2 Q$ j" I3 p# K2 o. H- C& a },5 y( _1 [3 U3 |+ n% S
{
6 ?! N3 P5 n. z, [9 m .active_low = 0,
1 v6 Q& }5 b3 H8 L1 {1 } .gpio = DA850_USER_LED2,) l' `& \4 j0 P! ~: I6 j ~
.name = "user_led2",
# k" K& }& ]* }7 y8 J9 N$ U .default_trigger = "default-on",
7 i G; o+ y/ [! ~: L( m9 X },/ f# N g. G/ E) v
{, M1 U5 b. c; O! i G" p
.active_low = 0," d2 k7 T& [- L5 @! l$ \0 @
.gpio = DA850_USER_LED3,+ V$ O8 [+ m- J. c1 M( n
.name = "user_led3",
% l& ~8 c& M9 |* i' S _: Q .default_trigger = "default-on",
$ \8 v( I4 L1 a+ R3 N \$ C# s# _ },* b* E, H& Q$ i, s) I$ \( s: b
};- M2 ~: ^1 u- r$ Q& u5 C5 |0 A `
E* B' C1 h1 I6 @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- E1 q% P6 A% }8 D4 I .leds = da850_evm_tl_leds,
+ |) q1 K+ d, d; s8 _+ o+ N- B" [' V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 u" E9 p0 [) r, D9 ]( L+ F {' s
};) G2 f$ V: R% p- D5 H7 U
6 | l0 J! B) |) }8 M$ gstatic void led_dev_release(struct device *dev)
6 U( E9 C, @) m/ p2 L{
& a( g- p; V/ D% `7 a};
8 _1 p* L" z3 ^: o# b; U
* R2 K) o* o- b# s _static struct platform_device da850_evm_tl_leds_device = {
% G2 y. n9 E! U. C$ n( k .name = "leds-gpio",
{" o% Z9 Y9 h0 s/ A! M .id = 1,9 L, R \' b" t% k0 u( Q7 N
.dev = {
& _; q ~1 y8 P* a% j! ~ .platform_data = &da850_evm_tl_leds_pdata,* I$ N7 X- {8 O3 S2 d: m
.release = led_dev_release,! c6 n7 t; v y
}
1 x" r$ a1 P2 z- x};
5 i: l/ x8 |$ a/ E
6 q, m7 w* _$ pstatic int __init led_platform_init(void)
) _1 T. s! L6 L6 V6 S{
+ j6 D2 P% U! W) ^; ] int ret;
5 F/ T i" M0 n: M2 J#if 0- h7 Y. {# A+ H( }/ o! A$ `, v4 D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& L- o. C& S5 y6 L if (ret)
2 I" A' v& d+ q+ F9 o" i9 Y2 g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% ]3 [3 E. M. X0 L6 Y6 ~. b
"%d\n", ret);6 m d, ^6 z6 g) J! a* L. M4 p: e
#endif
/ x, M$ d v* F' T* l ret = platform_device_register(&da850_evm_tl_leds_device);; C0 P4 V" W/ L! `0 [0 p% L
if (ret); v3 l+ i: | ^$ V6 _4 r
pr_warning("Could not register som GPIO expander LEDS");
/ Q+ L& c; O$ L1 x* ] else
/ }7 U- c& v+ Z5 Z* n: B printk(KERN_INFO "LED register sucessful!\n");( ?4 v* _4 h5 t8 s6 ~1 ~% E. u$ H
* G- k' K/ j: x" V/ L7 i# ` return ret;+ e! k" e+ t4 ~; x7 a9 E) \; _+ u
}
/ d6 p" k" q/ n" n( B% I- V) ^! p$ V, z' V2 y7 w
static void __exit led_platform_exit(void)
' X# l1 Q7 |: }0 [4 u6 _{
% j6 Z; P' n: \, Y$ T5 j% [ platform_device_unregister(&da850_evm_tl_leds_device);9 S& ~/ {0 R1 A) W
L" `2 f1 {" x5 C
printk(KERN_INFO "LED unregister!\n");
; I7 `% B! O) g}$ F" B/ h5 q* U& G8 R' _
3 t# N6 T& b* o' F2 Omodule_init(led_platform_init);
1 b% n* ], V% G/ h; L+ c9 O9 ymodule_exit(led_platform_exit);
) E+ p- u' Y( i& h/ x5 B* V( h" k) p% p
MODULE_DESCRIPTION("Led platform driver");" ?; r( G: S/ P, ^
MODULE_AUTHOR("Tronlong");
# }% j6 Y' }- ~5 o& LMODULE_LICENSE("GPL");
" |, i! I9 |# b& O4 Q( z
0 j! ^ [8 o6 _9 H |
|