|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& q7 j; Y: G: |) h' Q#include <linux/init.h>
9 b7 g( \: R. j+ ~$ Q#include <linux/module.h>7 v) [9 o& e+ Q! D e
#include <linux/kernel.h>, G! u# R# ?# }
#include <linux/types.h>
[# G) B, V S# E$ v( W0 H#include <linux/gpio.h>3 S4 a# e+ e$ \* K
#include <linux/leds.h>& L7 [/ B9 p$ W% q- U+ [
#include <linux/platform_device.h>
; D5 ^6 x+ p0 J* o8 `
! j6 d3 ?; C9 I#include <asm/mach-types.h>6 n- l0 x U" [
#include <asm/mach/arch.h>+ i+ o9 G6 J$ O o3 s
#include <mach/da8xx.h>+ r1 G0 G% T0 i: F: Q: X+ K* k$ [* w
#include <mach/mux.h>, x! {9 ]' @7 w; p
0 A7 d( i7 h: p; o' C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 Q* C/ t- _. u W1 n. O5 N* A
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 _6 e+ y( S* m5 m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 ], T B. m) S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 Q& @, _( k: k) E& ` R. F ?4 i2 i1 K( A) x$ g6 [; i* R; \6 b
/* assign the tl som board LED-GPIOs*/# O3 E. R! h7 P9 A4 C3 g
static const short da850_evm_tl_user_led_pins[] = {
2 a5 c( U% ?9 V+ }" Q T /* These pins are definition at <mach/mux.h> file */9 N+ G; L5 L# ]% {( v- w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' ]0 P2 M) l: r
-1
7 P4 k& V, @5 T% X, @; T4 v) ]};- R+ H- h2 m# q) v
; R. a9 @% [; ~& _9 O
static struct gpio_led da850_evm_tl_leds[] = {
. m. _, E+ ?6 `& ]) k {
+ i- j8 |3 e: g! ? .active_low = 0,+ ^2 ^# G- L( w1 Q1 `5 w6 |( @
.gpio = DA850_USER_LED0,
. v4 \5 `3 y* ?$ V .name = "user_led0",
- V+ v- n3 d* U) |' v$ `; ` .default_trigger = "default-on",1 e& _" X% s8 {& J c _$ u$ B. n
},
& q! Q! D! I% V1 U, W& @9 @8 {4 A) z {
/ h: w$ Y7 C2 o .active_low = 0,0 v2 H: T: A; i9 {
.gpio = DA850_USER_LED1,
+ i0 m9 C$ \1 Z* w) | .name = "user_led1",- _( A; |! z8 R6 V5 x6 r
.default_trigger = "default-on",. N7 A! x6 x |. W ]' Z' O
}," W0 |& r2 W$ B: u) j' A
{# B; E2 g& I9 i2 F
.active_low = 0,2 P3 F6 w6 q/ Y! _; I* |
.gpio = DA850_USER_LED2,5 z4 F1 W% H/ w0 A- B2 q+ F
.name = "user_led2",
/ q- X- y9 w0 F. z: x .default_trigger = "default-on",
4 s! j3 [$ D0 J; K- [ },
& u3 }1 J) P: @) A; W# |9 M9 P {- l+ H% S" U: [9 y* t; R: T
.active_low = 0,& L+ G/ Z/ e& X2 T
.gpio = DA850_USER_LED3,
O0 g" F& D8 `$ y4 k. [6 F .name = "user_led3",+ \* I" C* f* ] m- K
.default_trigger = "default-on",2 y8 N6 n0 a, `$ _. s+ F
},. F8 [/ }/ g- t6 J0 r. Y* r4 m
};! m& @8 ^& T* m1 h$ _9 S
. T6 e$ P. ]( v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ ~0 Q0 p, K' g6 @ .leds = da850_evm_tl_leds,+ }0 g6 }7 v! P. k! O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( @+ N! p% z1 F) k6 z& [( }
};2 |5 c0 U, \6 V7 Q* E' B
- V" G" n6 I4 I. W( p3 ]; Ustatic void led_dev_release(struct device *dev)
0 a4 |) \! k _5 Q4 Y1 I{
, v( ?2 ~7 }7 H/ C};
# x; c0 j% M: v7 A) _. p9 Y8 _, _7 L4 |0 }( ^4 v+ _
static struct platform_device da850_evm_tl_leds_device = {( s2 k6 q: T0 v, @7 G3 G) b
.name = "leds-gpio",
$ P1 u* f1 Q0 i# h .id = 1,
+ |" |5 l1 G( v4 T+ d" ]! ] .dev = {( q# i3 l& T* L' Z+ V6 g2 c+ n# b0 o
.platform_data = &da850_evm_tl_leds_pdata," z5 z1 ?4 Q" M* b/ [& ^
.release = led_dev_release,' e. G# F2 x+ ]+ m1 L) o
}
! F+ w" W( k' v/ N};5 k* T$ a' z9 q$ r1 t
* e* a$ ^& h D9 }0 y1 _) `static int __init led_platform_init(void)
/ ~# R) q+ R1 M) z( Z( J{
+ j. j8 x5 u! _; E int ret;) `8 g9 D; s4 J/ U8 t$ Q3 }; R0 I
#if 0
- I0 P3 E4 g1 h7 m* O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ q5 S! m! y R [' D3 t! |+ [) C; Q
if (ret)% ]7 M. }7 v, W- @$ i7 o* } W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ N2 u" b- S: l& q$ |' W
"%d\n", ret);
2 }0 J# _; @" l# b1 u% i E0 O4 @#endif8 ^0 Y( s/ f4 b3 M
ret = platform_device_register(&da850_evm_tl_leds_device);
/ P( `" U+ i, K5 r9 B% e# c if (ret)1 c x; a4 `4 Y8 y2 J9 D h- T( l
pr_warning("Could not register som GPIO expander LEDS");
9 g% \) }+ w2 C, h3 i- r) v else/ B; q$ n, w( o
printk(KERN_INFO "LED register sucessful!\n");3 }6 h+ [+ ^# f$ \7 N9 q
! w( G; U( F8 j) J( o
return ret;- T( S" w7 _# R4 K/ w1 d# r
}% y, S) ~, z- w* }* ?; C8 r
0 E7 Z; e4 S- Ustatic void __exit led_platform_exit(void)
+ m# n4 k Z4 w+ n{
: l. [3 h, U6 L" p" a2 n platform_device_unregister(&da850_evm_tl_leds_device);( f& \3 w( I# v) ?# Y9 Z4 s
4 d0 j8 g. ^4 d N! d# e
printk(KERN_INFO "LED unregister!\n");
& s. H& K; M( B& D6 k* Z}7 o" G9 R( ]; l: d1 B( p
2 q. h8 m8 g* f7 U7 Hmodule_init(led_platform_init);! w L0 E; L/ \5 @; B( e: W
module_exit(led_platform_exit);
! s/ U/ w9 y+ ?. K0 m: i" @% s. a" f, o3 c4 w
MODULE_DESCRIPTION("Led platform driver");
- J: i- w, \7 l6 TMODULE_AUTHOR("Tronlong");
9 p) Y: c! k# dMODULE_LICENSE("GPL");9 i+ q+ \4 |/ B# M+ Z0 k
' e o4 p8 D& s5 Z8 i
|
|