|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: \- m, K) C' y: i K# l1 x+ e#include <linux/init.h>
# Y; v9 y% y6 Y#include <linux/module.h>
+ h9 l: |1 r; Y* m7 V#include <linux/kernel.h>! s% e& A/ Q1 f; a* K
#include <linux/types.h>1 B) N7 B: w; s8 L& K
#include <linux/gpio.h>, o1 d5 h, }' Y$ B+ e4 t! ]) V7 r* K
#include <linux/leds.h>" ?4 V# J+ G9 P# W/ f
#include <linux/platform_device.h>9 H, ?% E: i) g# f+ m& _$ ]& |
( J4 }: q% C5 E5 T' q3 k5 {) K* O#include <asm/mach-types.h>
) L" g8 O0 N$ q }5 z. E* w* S9 i#include <asm/mach/arch.h>
& Q8 k/ }; Q& d, U#include <mach/da8xx.h>
3 e2 d6 L; f+ C! _#include <mach/mux.h>$ \/ T) s( M- k7 Z, Y. x2 U( C
* \" m3 v: J+ ], N( P6 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 U4 f* Y M2 ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ |$ H8 ]3 }+ u- N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): v: Z: p2 c% A- C+ l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), w: Q; g& X0 { ]! p, ~ S
) _! i9 i: ?' O/* assign the tl som board LED-GPIOs*/
6 Q6 c% r: a5 U h6 T* Lstatic const short da850_evm_tl_user_led_pins[] = {
- i) r. F6 r# r) Q6 o. e /* These pins are definition at <mach/mux.h> file */9 j0 o; h z, E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 G( m3 G9 }6 e4 M1 l! @' m& @: a -1, [$ G# Q; a$ p& W2 x
};9 S6 E- K5 @+ @4 c* ?" w
" y8 o8 L% L2 _" Zstatic struct gpio_led da850_evm_tl_leds[] = {0 m+ |( |2 [2 T* c) H6 J. f: _
{# A/ } {! |* O
.active_low = 0,- {2 e2 z8 d4 K- C: i
.gpio = DA850_USER_LED0,
1 x; {3 ?5 t6 k. b0 L" R .name = "user_led0",
: c2 Q0 S5 B* v. z' \* F .default_trigger = "default-on",- r; e. [2 a _2 S& y1 s& J
},% w1 g" K/ @9 S8 C& {
{
. n: N! P! ?4 X. R ] .active_low = 0,
- f8 ]$ M$ _! x b: [9 D .gpio = DA850_USER_LED1,/ e& x1 E6 @7 o% x4 q
.name = "user_led1",
$ C3 Q6 D* |: E7 B0 V' ~6 ` .default_trigger = "default-on",
% f$ N" L7 D2 s8 G K$ ? },
( k* b% K, h6 c- d% z! y& @ {
0 r/ ~5 H5 ? i: l* Z! F .active_low = 0,
. P3 R7 J" r. q* s% |3 s) y .gpio = DA850_USER_LED2,+ s8 o$ d' k; _+ n; P" r
.name = "user_led2",! V8 F6 ~% g5 S A
.default_trigger = "default-on",5 F+ k& s9 x0 Z' P8 w% {6 k
},
" K5 x" B8 W: }& P {
# C4 ^( v; z+ W2 W- e8 v .active_low = 0,
- c c2 }" ~+ C! k9 L+ P J% o .gpio = DA850_USER_LED3,
3 q3 S6 y( V# @7 ~9 K; L, V .name = "user_led3",
3 t% f# F& W8 p; a* C$ O .default_trigger = "default-on",
8 e: T, O! h; j' \6 ? },
) `4 t9 c+ F% j2 |" f: W};
9 n: T1 m$ {4 t2 O* v- D- s X$ s6 }# R2 R1 C* H H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ c/ V# ^9 h/ c+ w0 @ .leds = da850_evm_tl_leds,$ t; M# s& ~1 Y- X- L& B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; L% x! h: t% X1 ^: p7 e* @7 j
};) k0 J: [3 Y4 F( V$ x/ b
; W( O- E- @. v7 B9 L0 B. v: d
static void led_dev_release(struct device *dev)
7 V* V0 W% N9 k{5 E: k/ x3 R b. `
};$ w3 `6 _" K/ ^- C* z; Q
) k9 o$ r ?, E
static struct platform_device da850_evm_tl_leds_device = {
+ `7 V% M3 U. L6 W) g6 n4 v .name = "leds-gpio",
6 K0 Z5 [* ^. h. ?, y .id = 1,
* ^' G8 S. ~; v$ K; A* G .dev = {
* N! o/ p9 l" W9 c, `9 G .platform_data = &da850_evm_tl_leds_pdata,
& C2 v( `+ v7 l% {7 H i .release = led_dev_release,2 n6 i p3 A, R6 N* w7 h
}4 C) W# f# h" C3 W
};
/ Y% t- V3 [ b5 v
8 ?& a3 i% T' ? \7 i7 ? Y- sstatic int __init led_platform_init(void)4 `8 s7 Q5 r" ^- K: U
{; s5 W4 F- H5 t' R" x- B+ u" X$ c
int ret;
2 i( q5 J1 L) f" y2 U- D6 z; X& f#if 03 G2 H# \# g# G- ^; a l% L) l6 d4 H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ U2 W6 a9 P2 y2 ]( @5 S if (ret)& |$ M8 U! H2 G8 ?3 p+ J- p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- n2 S$ |" j9 m y
"%d\n", ret);8 X0 J! q) C/ b: [
#endif* L9 x) u, A) p0 q0 e* b
ret = platform_device_register(&da850_evm_tl_leds_device);
, T# o" y$ ?% y! l8 n5 T) B if (ret); ^' o3 Z* ]3 e w" X) R2 C, T6 l
pr_warning("Could not register som GPIO expander LEDS");4 q4 f' G; x) l) l9 p# O! m4 X
else
! G3 S) l; j2 n' o8 W- P printk(KERN_INFO "LED register sucessful!\n");
. }2 a$ f) b& W* ]
& t8 I5 w. j- R& O- @ return ret;
9 w0 I3 z) R2 Q' n# s, t5 |6 n}
0 r, W" g% T7 t
( M7 e* d7 d7 s& H1 ~" q* Ostatic void __exit led_platform_exit(void)
' f" b* W7 b& R1 L4 l7 {1 Z{
( k% O7 T# f, f! B3 N1 U) O platform_device_unregister(&da850_evm_tl_leds_device);
) K3 r5 ~8 A* i" e1 N8 X* D9 z4 ~+ j! [ q: z& A, ~) B' i; V# J$ V6 m
printk(KERN_INFO "LED unregister!\n");6 v/ T' Z7 q* l8 P1 i' L
}+ Q, b7 |4 v! F0 s2 y* w/ a* w$ K
+ ^* y/ w/ Q4 D( V+ Rmodule_init(led_platform_init);3 p. T; g1 Q6 H: w- E
module_exit(led_platform_exit);; W8 `& j3 S$ }
4 ]5 Q' ^+ p4 FMODULE_DESCRIPTION("Led platform driver");
& x: {( e, X& w& U) T+ L7 YMODULE_AUTHOR("Tronlong");: @9 S' u+ m' H0 y' {
MODULE_LICENSE("GPL");
8 t+ N* c6 E: \
7 Q+ w, S8 Y! n/ h |
|