|
求大神给下面的程序做注解,请稍详细些,谢谢。
) k2 I* H0 ?, Y) v b' h#include <linux/init.h>
/ u1 x9 Q7 C x#include <linux/module.h>
6 A. c: W; m1 t! W+ y" X2 K#include <linux/kernel.h>
2 ?6 Q0 v' O: m4 k# o" g% X#include <linux/types.h>
0 V/ Y7 j! H9 N" p3 F. u#include <linux/gpio.h>1 H! Q9 F0 q& b# u% z% q/ q
#include <linux/leds.h>, D1 C4 j5 [0 I: o2 J$ \/ p
#include <linux/platform_device.h>
& ~. ~8 ^8 \8 `! p6 ^
7 \: {) ~, A) s#include <asm/mach-types.h>
; F* H* h0 Z. I#include <asm/mach/arch.h>, a" I' i, L8 t! a0 C
#include <mach/da8xx.h>
5 H* R" A& G0 s#include <mach/mux.h>
) @9 x$ }# D+ c/ ~) \! u" G$ T$ {# B D* v9 S, h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), R1 Y5 J, R. e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ V" F0 B( ?1 ]+ r% O! s( M4 E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 E# H3 g5 v* Q8 K) ?; c! ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( E+ {: k7 V+ W( j/ S: b* O( B
$ n W9 Z- ]# F3 ?/* assign the tl som board LED-GPIOs*/; {! H+ E3 h; ]. \ j6 `
static const short da850_evm_tl_user_led_pins[] = {
" ]& U" b' v4 s% W. u /* These pins are definition at <mach/mux.h> file */
8 g: ~! q! Y2 R0 N. r; t( o, Y3 p DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# m( U6 m1 `8 G+ O' ] -1
9 W! n( `. z. n) g3 \% x3 \1 X};
; M0 ]. h) B" t! q8 D! Y
5 T; G f$ }, y3 s! q0 ]static struct gpio_led da850_evm_tl_leds[] = {9 s5 M* I9 ~- b: [+ f4 m) M5 _+ P" P
{/ F2 t3 u2 r) p8 E6 c2 q: y
.active_low = 0,9 p5 U @- ]( C# I
.gpio = DA850_USER_LED0,3 p# ^6 J& ]# K3 D* B
.name = "user_led0",
# j# X2 i1 Q. B4 E: ]0 l* D .default_trigger = "default-on",. T0 N5 P$ f/ n9 F2 f( N/ N
},
7 I- V: O1 D# O) O+ N T {) E& I3 q4 b* v8 H, D; t
.active_low = 0,
& c% L, `. ]2 Y0 j# K$ ~ .gpio = DA850_USER_LED1,% Z- p, S& B1 Y" _" N2 v
.name = "user_led1",
/ d& R. \, O; P9 E' ^/ ^ .default_trigger = "default-on",
; k/ A# X+ E; v6 @4 `% O( U; ~ },% R5 A) q9 q2 m/ O4 t. j2 r
{
& ?' X% k1 ` h u" w+ ? .active_low = 0,
T, a' X- x; f: @ .gpio = DA850_USER_LED2,
5 B% e) }' ~% V$ N G* E2 E" g' | .name = "user_led2",
8 I; W; `( x) ^. O .default_trigger = "default-on",
* u) ~9 r$ K V' u2 n },
6 n+ r/ b% _8 ` {
; U- \ ?4 m' W, f0 d .active_low = 0,
5 Q9 H/ L0 [+ F( Y .gpio = DA850_USER_LED3,
0 T. I4 y% _" }# L4 U3 T8 P+ u2 S9 N .name = "user_led3",
- J4 r! j) S) Y: u" }6 g .default_trigger = "default-on",, D ?+ L8 T) f, t" {
},
7 q, J1 U% @, p* P* O};
5 K4 u+ {" [ g" Z$ S. x& T" N
/ [2 Z' X' d- ]9 S+ Z4 V5 {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 X- b! w$ }& Z! q5 h .leds = da850_evm_tl_leds,) c q- ]! ?+ ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 \$ A2 O: f; I& _* g) Y
};
7 N& k& R1 o2 m8 s
8 G5 g! i+ Q* H6 n0 {static void led_dev_release(struct device *dev)
0 C" @8 Z o8 E{
, L! M2 ?8 E( C};' l4 p# m% v7 }0 E5 W, i
8 `- |( J1 @9 F3 u8 zstatic struct platform_device da850_evm_tl_leds_device = {
! b2 g8 J M/ M .name = "leds-gpio",
( ?9 }/ m3 S5 B+ S3 `0 x .id = 1,. y6 _6 J/ L N7 P8 D: S: K
.dev = {
4 c, D1 q5 I4 p" t6 v. L5 i .platform_data = &da850_evm_tl_leds_pdata,8 h$ F, ~% _$ T1 K
.release = led_dev_release,
2 K, [9 a/ C# a }6 V; p+ ^* |) Y& J
};
$ K1 J# p& c: a- Z% L% O
, }4 `0 w3 }. `6 |2 [static int __init led_platform_init(void)
; }+ R3 P; X+ C- ]2 H; Y: m{- e6 j0 [! R. T' }3 t
int ret;
# ?) W0 B0 C, T" W' F. s4 p1 q- F#if 0
% E5 c! n% X: o M' P ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% u& Z$ g( T: I% }; j0 `; J/ D$ g( y if (ret)
. Q: E! c* B1 V9 l/ u( J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 T0 x( m7 G% u "%d\n", ret);: X' z$ z; h% Y, M& X5 I3 Z: Q0 _- B
#endif% A, P& o% Y R/ n
ret = platform_device_register(&da850_evm_tl_leds_device);% i% h. m3 H" T: u; D& j. x R
if (ret)" t: R# i2 C1 W& p e0 k
pr_warning("Could not register som GPIO expander LEDS");
! i ^" @: `9 I6 H" ]7 Y9 a2 f else! d" r3 y- f8 T+ ]; I8 S# D9 H
printk(KERN_INFO "LED register sucessful!\n");( ^; _9 F- {% H
- N& ^5 b$ S. L5 u* v$ G' ^% ^- t, M [ return ret;1 g2 V1 X, X6 e6 S+ O
}
! u5 s$ q* A4 u# a0 Y: Q, ^' L3 F% y7 d+ I: b' g, q/ p) ~
static void __exit led_platform_exit(void)
& U8 ]9 O8 [6 u9 @# L; j4 [" p{, _8 R6 Q' q- J p4 e
platform_device_unregister(&da850_evm_tl_leds_device);$ p% B) w G! I; s
3 `9 j v9 V$ t- k: j printk(KERN_INFO "LED unregister!\n");6 u" }2 B" i' [# y7 g
}
W! l: W% c/ R; u" o; e4 b% X
: \7 p7 K9 \( R: r/ G" G9 imodule_init(led_platform_init);
/ O( ~: d+ Q2 h& S, V( I1 rmodule_exit(led_platform_exit);
8 @2 U6 o8 K/ o: m" ^, \3 @5 J X! c5 a0 S) H: f! p" u
MODULE_DESCRIPTION("Led platform driver");7 Y, J- r$ t6 V: N* J3 _! Q) C3 Y
MODULE_AUTHOR("Tronlong");% h2 ^7 y' Q l+ O& D# k( h1 }. I
MODULE_LICENSE("GPL");
9 y& R1 \# M6 k7 v
6 ?* d% E. d C% k5 m5 s |
|