|
求大神给下面的程序做注解,请稍详细些,谢谢。5 n! p7 `4 S0 `' k) n# G
#include <linux/init.h>
9 P, N$ k9 N- y#include <linux/module.h>
. E. Y% X4 p7 q# Z#include <linux/kernel.h>' ?: s* q+ J# R( {* D4 d `. P* {
#include <linux/types.h>
1 v# q9 G, U& _2 D0 j/ e" C#include <linux/gpio.h>
1 M, \; n% ]5 K# |9 b#include <linux/leds.h>2 @, l& q" F8 C3 U$ _' H6 Z
#include <linux/platform_device.h>2 L Y) @8 F8 `# V; n. h, `
7 x% f1 _% _7 B7 o5 `, w#include <asm/mach-types.h> F v3 L/ ]) L$ J* p
#include <asm/mach/arch.h>
4 m5 j- g3 `7 E' l* h" w#include <mach/da8xx.h>
( C K, l9 ?' @' D1 [#include <mach/mux.h>) }# }! [. U% ^% [& K1 e1 x$ M; p
+ Y% @7 E, K6 B) o0 u1 p! j% w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 Z' [9 ~- k- X$ u- ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; A% [$ s8 Q5 Y9 P- G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& g) Z# z- \, j2 X. N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ f0 M( s# ?& w2 { X: W* S
x+ y2 A2 q8 F2 w9 z/* assign the tl som board LED-GPIOs*/
5 G; E7 x6 M8 t: r: kstatic const short da850_evm_tl_user_led_pins[] = {
* ~- e. j6 d1 S1 I$ j- i /* These pins are definition at <mach/mux.h> file */
' k$ f/ S- I$ y; f1 A6 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 e9 s# C6 f; M8 B9 O0 A
-1
' v* z8 p# J- N) O; E};
w2 a. R" F$ a( i
+ L# G+ e* Y M$ c+ h1 Lstatic struct gpio_led da850_evm_tl_leds[] = {4 G7 R( b# v* q! y6 {3 U% ~
{
: O# P# j1 n9 Y .active_low = 0,
' d) |% M1 {( m) X .gpio = DA850_USER_LED0,
8 w8 D2 [/ w" r- b6 Z2 W .name = "user_led0",) _. v9 z* _% v4 p- H- U$ v
.default_trigger = "default-on",' n& J3 E5 D2 P2 F/ Q
},/ m8 M0 f( V+ e0 \9 l/ F! x. U8 `
{
\0 \3 k, ~, |4 L, Y P .active_low = 0,
' [" v$ \/ g; O) }- C& |8 x& v .gpio = DA850_USER_LED1,+ I4 {* p. s6 J( [) Y4 C
.name = "user_led1",
! Y3 p1 ~" }/ i8 M" U5 f! Z .default_trigger = "default-on",
. L- x" Y. C4 j },
/ i( }" U' {- a1 U, F3 [ {3 `* j4 Y! K, R3 {- V2 p
.active_low = 0,7 ^4 | G+ d: ^# Y6 k* L3 |. l
.gpio = DA850_USER_LED2,
) d% c6 g& x3 n1 z5 t' v4 x .name = "user_led2",
0 z3 H v% h; x' [; { .default_trigger = "default-on",
I% _$ k5 }: M, M. e },) D9 i: i; I+ j. _. U0 d
{
- l5 R$ R" W6 d .active_low = 0,2 `5 j6 u E5 V. r+ r7 ^# \5 d
.gpio = DA850_USER_LED3,
; U1 c4 O- }$ y1 g7 I& y .name = "user_led3",! V5 u1 M D' R2 z
.default_trigger = "default-on",
) h2 e, s$ ~# y },$ R5 R- D$ v) {' e# r& N
};8 }3 _6 Q0 e1 @, {& @8 O: F6 H
& {) e( J0 D0 a' P" M c6 [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* o) Z) H/ P: C8 e: R, V
.leds = da850_evm_tl_leds,9 W% L X2 H4 A; j; n' L, |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 Q: q0 F: Y9 Q8 O; @4 N( Z% P};
) b- R; z# \. w6 W4 } ?2 f, U
& b7 ]9 c) W- E* vstatic void led_dev_release(struct device *dev)
1 @. l% N% R! j{1 p) @2 u5 ^. ~1 [7 d
};
/ e/ y6 l, ]" j7 I' N4 {' E) c/ |' D1 P1 a- Q' t
static struct platform_device da850_evm_tl_leds_device = {
2 W: l' f5 E+ B .name = "leds-gpio",
+ Z# E. T. g7 u# [( n+ h .id = 1,- h0 I; A3 K0 f4 e
.dev = {6 [9 q9 S: K8 u5 i
.platform_data = &da850_evm_tl_leds_pdata,
& W! X7 @- g' j; ?* Q& t .release = led_dev_release,
8 I0 R# }* P( Q- o, S* R }* Z: x3 |+ _# e1 r% I! Q* o
};
" |+ q( ]; ~3 m2 G- d
/ y( i i; h, d' ^9 y- \. kstatic int __init led_platform_init(void)
# d$ {8 [" N/ R% r4 _{+ B+ F% C5 ~ u: M
int ret;
! F5 v1 g2 ?2 {7 N#if 0# S2 ?: A# P6 n5 Y' f* ~2 |+ `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) e+ v5 [" B" |5 Y% ]1 ` if (ret)
/ p/ {* E( ~2 I! Y C$ x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ |% T0 T" P1 _. \) D "%d\n", ret);, @5 B) I2 z: P+ x+ B4 d. {1 L" N
#endif) B0 X1 E: Q/ U
ret = platform_device_register(&da850_evm_tl_leds_device);
" `/ d; `, h& D5 I5 \- {9 | if (ret)% F0 T; `1 a6 s0 n! @3 P D9 B
pr_warning("Could not register som GPIO expander LEDS");
1 e+ |+ N* g" c' j* y else; d4 @2 y# G4 |9 u* r
printk(KERN_INFO "LED register sucessful!\n");
6 J0 R: q: f+ f8 N5 v1 E! w3 Y J0 a. X, m3 `4 P# ]1 {( R
return ret;
- o' u9 z+ R, h v. i3 T}
) M$ N- |! `0 p& F* E* ~, ~$ Y& c" |4 h. b
static void __exit led_platform_exit(void)8 [& {/ s; g- l9 m4 m
{ ]# O: D4 }" i* S9 {6 Q
platform_device_unregister(&da850_evm_tl_leds_device);
' a8 g7 P9 Y2 ^3 p1 Q' z# y9 |7 H* Z8 k2 p u
printk(KERN_INFO "LED unregister!\n");
+ s- o( b# U1 ^! l) N}9 E6 i' [' }8 H: b
5 n; B' A/ w2 v/ X5 o
module_init(led_platform_init);
3 a+ F' J; q, @+ @" R; U$ K! e7 Kmodule_exit(led_platform_exit);
. v# h1 K7 B& D U# H" x
5 Y4 o1 [- c) Q% xMODULE_DESCRIPTION("Led platform driver");% f" L. `# M) f: ?
MODULE_AUTHOR("Tronlong");
1 V3 t( R$ V( Y( x7 I0 R0 EMODULE_LICENSE("GPL");
2 p+ q% t- Z9 v/ o4 v' W( {% M& Y
|
|