|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' R z; p- x5 b. Y |, V! T#include <linux/init.h>
- J. |1 ?' U V9 q Y b7 r4 s#include <linux/module.h>- ?+ k9 N+ F1 Y1 h# a6 [6 Z+ w W
#include <linux/kernel.h>1 ^+ H5 `; f Z# ~8 o
#include <linux/types.h>
) N6 _# v6 {* Q A3 S2 {& O#include <linux/gpio.h> l+ o. q: [/ m7 g9 R
#include <linux/leds.h>
4 }4 Q4 M, m% i+ b, ?#include <linux/platform_device.h>, O. H% H0 c# s7 }2 t! m6 X, a$ e$ p3 P
8 i9 t, v% x. Q+ h
#include <asm/mach-types.h>. _+ K9 [, I) E
#include <asm/mach/arch.h>
g# O# X6 x: m! [$ H9 a4 u#include <mach/da8xx.h>9 D/ A" u; w0 f* _5 l6 D) C, j
#include <mach/mux.h>
, n, [$ I. o" t* k$ N( Q' E/ `! i% A! U/ D U% O, u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 I& z; u" d. l1 q, X3 y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 p8 g+ b/ P# ~0 p7 I#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) l8 n( h& a. j: W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 @! a: A9 O- G5 _
0 K2 b$ y2 f. ?9 l3 H/* assign the tl som board LED-GPIOs*/
+ n) y+ N! y% M4 Lstatic const short da850_evm_tl_user_led_pins[] = {# H9 v2 L0 o: [$ k) M
/* These pins are definition at <mach/mux.h> file */4 H- ?2 b" p7 D6 l( c; R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, _3 T4 X/ d3 e4 g/ F -1
3 d4 f& B- d1 Q! L$ B. u8 i};% \' ?- u) p P; x* M
/ t; M! I3 `/ J1 ~ F7 ]
static struct gpio_led da850_evm_tl_leds[] = {' H3 W% H0 f* b/ K& L& ?
{
7 N! j; Q* U5 z5 t .active_low = 0,1 q% y# x7 ~; a. B
.gpio = DA850_USER_LED0,
1 a+ d! A) e$ H3 P- B2 f; { .name = "user_led0",5 b* o3 o1 }. `
.default_trigger = "default-on",( a4 A; a d3 D3 K- e' ^) F; v0 W: V
},% m# l) o- Q z9 v
{
( Y( L" w0 _3 w( ?/ E .active_low = 0,
, `7 n' P6 w: ^$ j3 B* _8 W .gpio = DA850_USER_LED1,
5 A( s8 o0 C2 X" n) v2 R5 i .name = "user_led1",
8 B% v" _* j* i! M2 T, K: c( k .default_trigger = "default-on",
f+ h0 H* E+ o },
/ @# _5 ]# F0 k0 H, j {% [: j# a8 q& C% E' B1 w+ [! p. o8 [
.active_low = 0,
8 P3 C# f/ h5 f! X( h! g .gpio = DA850_USER_LED2,
# e- B# U( _# L2 q$ m( T .name = "user_led2",/ j! [7 _& v# x+ { o
.default_trigger = "default-on",) {4 Z+ [) h% ]; W' o# c
},
2 G* Y% W! d5 z* f7 o$ \! F! s2 l# V {
: }7 \5 [! g$ b9 o& t$ k- x/ t .active_low = 0,
1 S! G" A' H. o$ F k' `7 S .gpio = DA850_USER_LED3,6 j7 l7 k0 C# v7 o
.name = "user_led3",
% ] N9 x# `; [; Q0 r. K .default_trigger = "default-on",6 X; q, d/ i# W" q* ]. p$ I
},; H' y0 e4 f. D* o& y1 s2 ^2 b
};
1 }- k* g3 m, o: R8 s
% V( g; I; f1 U8 E( k8 |- g( Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; t, G& X, D" r% g% p .leds = da850_evm_tl_leds,0 Z- b& r1 N. `* s. @) A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 }1 v0 T- S5 ^% S& b# x! y* H
};
& ~3 z3 R! U! t8 R9 W1 w' i2 l, I9 Z5 r' V( w
static void led_dev_release(struct device *dev)
; ?( M) H, K! u0 _" k{: o& D2 C" ^ u' r- y4 V5 ^6 K
};& H4 W" s, E, u. Q* d4 t' i
1 ~; k3 u$ u& L7 |6 d: fstatic struct platform_device da850_evm_tl_leds_device = {
6 u6 R5 q* F+ v( H% D1 V) P .name = "leds-gpio",) b. l; x4 M- i/ h n2 b# L# K
.id = 1,4 M! M% e% Z. u
.dev = {' t4 w& `9 V% H. `. ?8 W K, L* P/ C
.platform_data = &da850_evm_tl_leds_pdata,
$ S, j: x% z) I% l8 y# e .release = led_dev_release,* d$ W3 p: p; ^. }- i
}
9 r4 C0 r5 }- C2 w};* z" q6 {" R+ q9 c& ?# ~; x
: H- \( P" c" p8 J4 J9 `& \% I
static int __init led_platform_init(void)
9 [ t6 ?+ m. u6 Y7 }3 _4 T{
' J* X: o8 N# A3 L2 v int ret;
' C8 k5 w! D/ D; e#if 0: \/ q Q1 l% m1 y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( j9 p5 _# U2 D$ D1 g" \% }
if (ret): ?8 b5 E: Y) \+ ?3 x$ ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- O5 L1 |) f3 z" ]4 p9 ] "%d\n", ret);
$ H) f$ p6 N6 w! ^. V6 H0 P#endif6 t& d( z0 L: W8 A
ret = platform_device_register(&da850_evm_tl_leds_device);9 T. R7 ^* O* X% p2 h/ z
if (ret)% _9 S/ r" A; ` w$ P# c' g
pr_warning("Could not register som GPIO expander LEDS");
7 |" K# p: L( q% H3 |. T; w6 [ else" p+ v3 ]5 z) c: S1 R
printk(KERN_INFO "LED register sucessful!\n");
( H! C6 p. N3 X
W% ?7 W( p5 I9 a3 |- n return ret;
7 C H$ @1 D* U9 y# ?+ ]}
9 R* `: t; h$ `- E. `, ]! j M9 V9 ~# ]
static void __exit led_platform_exit(void)$ r9 i3 a# e" ^7 {. c8 `
{
9 l/ A1 T; @) X% t3 }' ]; s platform_device_unregister(&da850_evm_tl_leds_device);
) K6 e$ Q' \ h
' M$ J. `$ _' z' B2 v9 K printk(KERN_INFO "LED unregister!\n");
8 ~) Q0 t) b: T* B! C2 w} B; h% b1 {$ ^. `8 R3 `
) R& L% J$ B8 D& X
module_init(led_platform_init);% f$ |2 y: ^# w: K7 D* d3 q6 R
module_exit(led_platform_exit);
" i7 n4 l, x/ q- H: F! N3 g. I7 F x- g9 h9 E4 k
MODULE_DESCRIPTION("Led platform driver");% N8 I! t' b, B! V G+ f5 O
MODULE_AUTHOR("Tronlong");# N* c# f- b, d3 p: ]7 c* K3 C+ n
MODULE_LICENSE("GPL");
7 }# s3 b% q/ B3 Z* j3 n
$ t) Q- a2 h X0 b |
|