|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 V0 P) n/ N4 `: e3 e#include <linux/init.h>
3 `, \# w( v) M1 [#include <linux/module.h>( x) v$ R: |' Y/ ^; a1 `1 ^
#include <linux/kernel.h>
2 K8 L# x- S' S1 Q+ j0 N2 M#include <linux/types.h>
" s$ Y* `5 N) A6 e; a, k#include <linux/gpio.h>
" |- l d* _* _' e! o& A0 k#include <linux/leds.h>
+ w E+ ] Z8 f' u; H- q#include <linux/platform_device.h>
: a; s0 e4 Y9 E$ }! \1 z- _
" s5 I4 {, w! ?6 E% e& J1 v& P#include <asm/mach-types.h>
; u) l0 K: e- q; H#include <asm/mach/arch.h>
) L7 a# e6 \* b* X#include <mach/da8xx.h>
! G" h0 N; {9 N' p#include <mach/mux.h>6 l5 A" o6 r; Q9 k! m
+ z4 A# ^. X8 h/ O; S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 D' p0 e; s' G% y: N7 X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 ]; W* ?8 m$ b: ]( R- d
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ V9 P( z& ~ w8 L1 e+ E2 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 V( F; A3 u; y# ]1 P/ |& H$ u
) [- z: Y( s$ u a2 q) m+ {2 J/* assign the tl som board LED-GPIOs*/
) w4 M, b+ U/ Vstatic const short da850_evm_tl_user_led_pins[] = {
# c9 D$ j( i! z2 U0 U /* These pins are definition at <mach/mux.h> file */
2 Y. g3 n; K3 S, _1 i# r Z3 J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ B; V& `7 N4 |& B2 _8 N -1
b- p( d/ v7 C' D. R" k) ]/ a+ N};! Q: o9 g: A- Q0 l8 I5 V
% o3 R3 ?, e. y( `0 k) h. u# }
static struct gpio_led da850_evm_tl_leds[] = {) @9 o7 l1 o$ k; D* G
{
( F/ f( e/ j; } .active_low = 0,
. M1 j, u3 J/ a6 q4 D$ R .gpio = DA850_USER_LED0,# e. C8 E& H( e
.name = "user_led0",
: V1 t& z: `8 K" ]8 T* T; Y$ ~ .default_trigger = "default-on",
7 {: x/ f! ~8 t) t },
" Z+ s5 L0 i7 b0 f9 A9 ? {
# u) r. \4 y, s .active_low = 0,
9 M* B+ |$ q1 r& Z& F1 {2 j .gpio = DA850_USER_LED1,
& @9 {6 a! n% h" ? .name = "user_led1",
4 ?5 d. T% ?- v) I1 y( H7 j .default_trigger = "default-on",
2 |: Q/ Y- }( w9 M },4 K0 C+ _( ~5 a; @2 o: k7 `2 J8 r
{
2 ^3 m" e. p' t" x8 ~( l+ F/ \! O% H: e .active_low = 0,
+ p# i& c4 n$ {# S1 y8 L" f6 v- \ .gpio = DA850_USER_LED2,2 X: ?; S! l8 N, B; ?/ d" L7 k
.name = "user_led2",
" @1 b' Q" ^/ W% h* V' J2 @6 J .default_trigger = "default-on",4 l# i- I$ _- L) \2 R' f2 J
},
; U% v/ h$ t. ? {+ m& X. E1 g2 M8 z$ n. w
.active_low = 0,
9 A# B5 w+ s# ]! ~ .gpio = DA850_USER_LED3,% R! F' H) o" q2 j
.name = "user_led3",
& u- J) S A1 E. G0 g+ z) ^' p .default_trigger = "default-on",7 W$ k+ d" S' I" g! b: w7 J6 ~
},
2 w! B4 n/ Y, @2 V};( e$ H8 O; j/ e: I: o
/ r: ` Z: @( p( Q0 F7 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 U" i0 g x1 _# r% ] D .leds = da850_evm_tl_leds,3 r2 C [( z3 h* Y* d; u" o) F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 p2 a9 K; [% y8 R};
7 F6 `: v- O' o3 D5 A1 S8 @7 ~- `3 U- ? O+ v+ A" U- `
static void led_dev_release(struct device *dev)
0 Z2 Z. h5 R& E8 H{6 K0 e" b: n+ `- S( \1 q
};
3 s% }- F" R7 X, m/ b2 ~
% @7 L/ w% K$ r1 |( o& fstatic struct platform_device da850_evm_tl_leds_device = {
. W! w. Q$ W( k! ?+ [" ` .name = "leds-gpio",
' ?3 {) p& x- X9 E5 C .id = 1,
+ ?5 H& b# a+ S6 z# l: t9 a .dev = {0 D* ]3 a' U, c$ g* [. H
.platform_data = &da850_evm_tl_leds_pdata,/ T9 T) n' Y9 V1 l$ V1 F/ [2 G8 O% `
.release = led_dev_release,) ~" O0 ?! c& Q7 u3 x1 h
}5 T$ Y! ]/ U: y; {( V0 W2 G. @( B
};
. u0 w# _7 {* \# _) v
6 [0 ~$ o% X; X8 i% [" l( Pstatic int __init led_platform_init(void)1 d5 a. p! K4 @( Q, S
{
. ] c2 b6 Z& n4 K! v int ret;0 K0 ~3 D$ K- J3 ~0 a Q- J
#if 0# K/ Y) a ]2 {) C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* D2 D+ J6 N% @, {
if (ret)" I' R3 K0 s' z1 q1 m, \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! N- f* C( }4 x2 h
"%d\n", ret);9 D- [7 n# L2 f; Y. ^. S. _
#endif! f/ g4 u" J1 E4 _" K2 M9 u) Q
ret = platform_device_register(&da850_evm_tl_leds_device);7 }9 u/ m. \5 f, J9 {) a" b
if (ret)
9 |% s/ t% r$ G9 c' D pr_warning("Could not register som GPIO expander LEDS");
8 e& \2 A8 m2 k$ k else
! l8 J O; L, a" T2 p printk(KERN_INFO "LED register sucessful!\n");
8 I5 _; A# i9 ~6 e6 ?+ ?: P- G4 u" C9 e
return ret;! ]8 L' O2 u- A" E0 |# i7 u
}* u+ E2 @7 O$ ~8 O
# A- S2 U9 \' ^/ g3 e
static void __exit led_platform_exit(void)
9 [4 p/ s; `0 I% l{
! p6 t \& R: z; I( L platform_device_unregister(&da850_evm_tl_leds_device);) Y+ G# A: v" O
3 _3 C! W6 f* C1 Q/ { printk(KERN_INFO "LED unregister!\n");4 A! q3 H" R! S+ u8 p4 W6 D, h
}
; [/ g% f2 c y2 J
, A% r$ U! s5 A0 _- O5 }module_init(led_platform_init);4 J8 N1 V3 r# _3 q: B8 L
module_exit(led_platform_exit);
6 D$ `* d& I6 P }& V+ u4 n* Z4 ~
4 l# a) o; ]6 p% t$ V. j, ?" JMODULE_DESCRIPTION("Led platform driver");
3 }) @' d' | tMODULE_AUTHOR("Tronlong");
k( F: ?! S. d( @MODULE_LICENSE("GPL");- A7 J" r; H( ]/ p( `
9 F; v. j0 a6 y9 c" K4 } |
|