|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# N3 { ^: |/ f# s! w* Y4 ^
#include <linux/init.h>
9 t2 z# v; w& N! O4 _, u* |#include <linux/module.h>6 }! K8 T# ^( K$ X4 c/ ^2 C
#include <linux/kernel.h>
% H" l6 A* F# \3 ?#include <linux/types.h>- z* V: a& o" P, A. T2 u$ L
#include <linux/gpio.h>
! e$ j5 A, @( T+ ^" ?#include <linux/leds.h>
* ]! j0 O/ @. x, X* p$ d: E) E#include <linux/platform_device.h>
- A' E9 a5 [5 B& K% L$ H$ q6 s9 F: F. B! j
#include <asm/mach-types.h>+ n0 |8 J% X( l0 L! X* b5 L( g
#include <asm/mach/arch.h>
: s5 v; {7 @) @: ~. o5 a8 X#include <mach/da8xx.h>
: O$ I, R. ^) q0 X& P0 {#include <mach/mux.h>% d8 r5 A* t* M) |9 k
% ~3 b* p$ w5 u S7 q6 e% p5 E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! c% i8 e7 q; a; I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); J6 e. U6 k8 r, k4 Y+ R1 E9 i4 d
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), w, M/ u0 B% M- C$ E, \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 L' E+ @4 _3 e$ y$ O
) o6 b {! o4 K) W% D# ^/* assign the tl som board LED-GPIOs*/. t# I5 M- [! o( X1 j
static const short da850_evm_tl_user_led_pins[] = {' x+ x2 p; x2 F- h4 R& _$ @1 g
/* These pins are definition at <mach/mux.h> file */1 A2 e6 C4 \8 D3 g! O) s2 B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) x X! Z$ Z4 W; k7 s( T* T
-11 J( `$ G& ~1 K# D! x, J; R o
};+ p) U8 p2 b4 ^0 S) E# J5 [
0 a( [ u- E7 I6 Kstatic struct gpio_led da850_evm_tl_leds[] = {
2 v8 g B- _; l/ p6 [( g {6 k( Z, ^' X) \( c k9 Y
.active_low = 0,
( C0 l/ V' k3 J0 S .gpio = DA850_USER_LED0,
4 ^* O3 t& T" N. ~; x, G* S .name = "user_led0",
# N" P5 A6 j) e6 H8 \: h( e .default_trigger = "default-on",, J8 U' E9 c6 I9 W1 C) G. V7 P, B3 M
},+ A+ \- M5 @& K
{) V2 K6 z+ e8 c: Z
.active_low = 0,' T2 {9 U4 E& a) a% b/ }
.gpio = DA850_USER_LED1,
# n! \# Q2 q4 s/ [/ b .name = "user_led1",3 x: u/ f/ v+ u) P- Y5 [# [! ?, H/ x
.default_trigger = "default-on",8 l+ L; I( A6 M% c+ v
},
8 i* @1 {+ {6 ^* r' ^9 S" f {
* K: [6 M7 P5 [ .active_low = 0,$ ] h% L4 T4 M( q. _, ]3 _
.gpio = DA850_USER_LED2,3 F% u8 i" E0 F" F* L( G* c
.name = "user_led2",
2 ?" n5 p9 S3 m5 r .default_trigger = "default-on",) ?( K) E6 x5 K
},4 e% F1 j0 n: k& g6 f( M% e2 x
{7 @3 r9 ]: q: }' c3 Y9 ^9 V
.active_low = 0,
6 v# E/ G6 J5 z6 e .gpio = DA850_USER_LED3,2 K! R% t% I) Z3 S* g0 |+ x$ u
.name = "user_led3",8 Y! y- }3 Q- B9 e8 i- Q+ G9 S4 ~
.default_trigger = "default-on",# V V2 u R* g4 p
},% i1 a) x7 y% Q) Y% b" ]
};
% p& a' k$ V5 ^0 b* X0 c( m. [* O. f5 B8 g1 e( a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* Y1 J2 C8 T- Y- G5 W3 O .leds = da850_evm_tl_leds,
9 Z" r: ?9 A' t5 g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* r% T* |* Y: d9 ~2 z2 N/ p};8 m/ c5 @- H$ _! K
; }6 t! Z# p U/ Sstatic void led_dev_release(struct device *dev)
' M. i. G- Y2 O; c8 r{7 U* C* n' J" |- t6 n9 Y8 l# ]/ {
};3 x6 L& Z+ }2 p; n9 }* `/ p) }
+ V* E6 W A) N# ^& a: |static struct platform_device da850_evm_tl_leds_device = {" j7 e( W( b7 o9 i& h2 a2 J
.name = "leds-gpio",
8 B' F- \* g; ~ .id = 1,
1 ?1 F* w- n* |8 J5 I .dev = {
4 V0 y1 f2 W6 p( O/ e2 F .platform_data = &da850_evm_tl_leds_pdata,
) A/ q( L: g+ n. Y; {- M .release = led_dev_release,2 v8 L8 b2 w& L
}
5 Z. P9 a: ~4 ?0 N};
- v. c. n$ T- u, R7 Q( y" }
" | }3 Q' } _5 K/ i% sstatic int __init led_platform_init(void)
' k2 G' U1 u q5 R0 G' u" V{# \; I) a8 E: w, ^& [
int ret;
. M y' z# P; F#if 0
; }7 m, v7 A- h+ | q, n9 E" q( \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' M9 f3 P4 a' u/ F
if (ret)
5 x, J! R4 ]/ G; L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ p& ^2 E6 Z' d0 ?; W' ] "%d\n", ret);
* \4 {9 j: {) _" `#endif
. w/ T- D# k C# t: X ret = platform_device_register(&da850_evm_tl_leds_device);
2 v7 T: H6 v/ f. f" Q0 U w if (ret)% q ]0 v3 }, y G4 T
pr_warning("Could not register som GPIO expander LEDS");3 I; d$ Y& ` N- C% K
else5 J4 v6 w( P" Y, k, W6 ?6 I, }
printk(KERN_INFO "LED register sucessful!\n");3 h7 p' I/ a3 d v: N/ q. l
1 [+ [. Y9 E% M0 Y6 ?* ^1 C
return ret;* b$ M+ \' v$ w0 l/ F
}
- @/ g. p) g2 [: q! Z# _& B+ i4 X
' @+ h' Q* Y# Z+ Hstatic void __exit led_platform_exit(void)
* }( a4 H) o f- O e ]3 d3 K) ]{
) R+ h( k, A; m; l+ l platform_device_unregister(&da850_evm_tl_leds_device);) ^+ [4 N. T% T A) ^6 ?
- K0 @, M9 z6 k! C0 |) G
printk(KERN_INFO "LED unregister!\n");% r0 V u9 x% d! q1 H
}; L3 z; W2 O2 b2 g4 z
! O; F. u; c; S; h! |
module_init(led_platform_init);
& ]* R3 m) _; \module_exit(led_platform_exit);
- m) Q# j" u0 M; M* N$ w8 c$ i# d; b, D
MODULE_DESCRIPTION("Led platform driver");& G7 G- j. m" r9 H
MODULE_AUTHOR("Tronlong");( [/ y& X: y( i/ V9 X& L1 K& h
MODULE_LICENSE("GPL");, ^7 e- U3 e: u6 T
1 Z; g6 F0 `7 d% k |
|