|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 _2 w/ E: @. v* }, d8 _* y0 O#include <linux/init.h>$ D* ~1 K- V0 h4 s p
#include <linux/module.h>% J; s8 s6 ~& s; j7 T" I/ R
#include <linux/kernel.h>- y0 C* F3 A1 M. l7 O. y
#include <linux/types.h>
: r) ` O3 {" l#include <linux/gpio.h>1 Z' U( z( o0 B# Q1 X5 Z
#include <linux/leds.h>
- o- g( \3 [, ^ Z3 ^$ p#include <linux/platform_device.h>
1 p7 [- \% p# T% L
/ Q" M( L$ G+ E1 D4 Z8 c- V#include <asm/mach-types.h>( N9 W8 G- A# V2 R2 M- W( r0 z+ _
#include <asm/mach/arch.h># f0 D7 M: W/ z0 ^, ?4 r5 j& O
#include <mach/da8xx.h>
! {9 E' w0 }& P9 `9 u5 R' k5 J+ P#include <mach/mux.h>5 [2 s+ S/ Y& k" N7 a
l8 ^& b C- v2 _% u! J9 z' v0 s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). G. K4 C8 c, ?. ~' k: X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& A0 _1 q' w3 x8 z0 I#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; q) F6 r* p0 d" [# V% K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): H8 [5 S! Q- t; j+ C
4 o1 I# L9 O. @& q5 J s) ?
/* assign the tl som board LED-GPIOs*/
# s8 x$ P! |+ p+ ]/ J& x/ R, D/ S0 ^static const short da850_evm_tl_user_led_pins[] = {1 R% R$ u7 E" X. j. |6 H1 S
/* These pins are definition at <mach/mux.h> file */
! r: u6 w1 o0 j Q5 d DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) z m1 M: `3 W( }. Q; e
-1, @, P/ k( Q- m4 k! d& n
};
* a) ^7 b$ i' j4 l5 {( L
; n* Q u: E0 u( `+ K2 O% F# Xstatic struct gpio_led da850_evm_tl_leds[] = {
, D3 v U1 k' V$ `! ], A, D {
7 l: C4 o1 f3 F6 Q" O/ Q* N .active_low = 0,
2 p" U! H8 J, q s' d4 Y6 c .gpio = DA850_USER_LED0,
# U: F' t r9 Q .name = "user_led0",6 k" U8 ?& [( H: a2 H
.default_trigger = "default-on",6 y/ K4 g4 E0 \& b
},
Y: \" H/ n+ N7 S {
4 v" h/ K; S" y4 |3 `7 g2 K* |( K6 f .active_low = 0,
8 n1 B5 D* h5 C& D$ f/ i .gpio = DA850_USER_LED1,4 E; n& T a& u8 w) O8 _$ s
.name = "user_led1",
5 F' \* w/ B8 U m# @1 Q0 g .default_trigger = "default-on",
3 M7 D$ h- p i8 C } },/ g, |1 y) C% p
{( X$ [! Q3 i( i- f/ ~
.active_low = 0,* m! e( c; O# k4 I' z# D- @1 D8 Z
.gpio = DA850_USER_LED2,
' n: g9 R6 _0 R n4 U" g% Z2 f .name = "user_led2",1 O1 G% t$ u( M4 Q
.default_trigger = "default-on",1 P% u W0 U; {3 C: H
},! i" `# H" O* ~: ?* j
{% }- s% v% n6 a. ~9 l
.active_low = 0,
& z1 r8 s7 \8 } .gpio = DA850_USER_LED3,
2 q$ d# Q" k1 O% s* J .name = "user_led3",
F5 R5 e- d( I0 J .default_trigger = "default-on",
: i8 z c6 @8 ^$ o6 P },0 \( Y: c! K7 G+ t& N! d
};
$ O1 S' t: z: _. N; N
3 C) H+ H) k6 G- q/ Estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! q) ~2 V$ T9 S, K
.leds = da850_evm_tl_leds,- Q$ [2 Z( }/ q& S5 w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 y( R' L5 h5 ~' e6 r
};
/ |% Q- J4 q0 w/ L7 g1 U$ _: }# F8 L$ i/ T
static void led_dev_release(struct device *dev)8 ^2 w" q9 L& g( U
{
3 K; o% A+ ~* Q; P* g% z& F; t' y$ @};
7 [. S+ Y( B8 O+ D4 X- ]4 Y8 T0 V8 C. \, g) `
static struct platform_device da850_evm_tl_leds_device = {
9 @1 l' C) [, Z1 r4 v5 z6 w) _ .name = "leds-gpio",9 w9 e3 a0 F$ Q
.id = 1,
4 {9 q6 ]; N* F6 Z$ ?' J .dev = {: N5 W% I% x9 r" d* T7 t2 K: G
.platform_data = &da850_evm_tl_leds_pdata,
! A; _' d0 C; G3 g# q! H .release = led_dev_release,
9 i% l$ H# E8 Z% Z. t }' x+ h" |3 `5 y0 c- \
};
: K' Q. o. T4 f% A9 r7 L5 X. G0 D6 Y
static int __init led_platform_init(void)
& Q. y7 ?% c, @" X3 K3 E* T/ X8 x{
6 d/ `* a: Q% B+ E: {( N | int ret;
5 J5 a& } I) p( j+ o# `% ~#if 0$ ^. E& L f: X8 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 J; l0 A& q1 T- w7 |2 C if (ret)1 ~- n( H6 Q4 O; i* D9 u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 @4 H t8 t7 H i( m% y
"%d\n", ret);5 i8 l$ {6 n u! Y K# K
#endif
6 m& n$ N. `& O7 l( P5 T ret = platform_device_register(&da850_evm_tl_leds_device);
# H* ]* b; m b% S/ k if (ret)
, J. q% j" K& g. O% ]2 [ pr_warning("Could not register som GPIO expander LEDS");
" f2 ~5 l" d) Z& B8 i else. }3 Z: d+ a0 t) L5 _/ `
printk(KERN_INFO "LED register sucessful!\n");
2 ` g m F8 q, l7 c$ C/ j. G8 F
return ret;, q& t/ F- I1 e2 [/ Y
}6 p9 i5 {+ Z6 N# j+ U
0 q+ g7 ~3 M! a0 F% Xstatic void __exit led_platform_exit(void)$ U2 h, s' o) U1 v) g2 k1 g
{3 J2 r# G, X: F' h, S
platform_device_unregister(&da850_evm_tl_leds_device);$ s' H+ u7 {) r ]9 Q9 L3 N) j( Z! ]4 R
' u" \: w3 q) y* Q/ v( k4 L: Q" O+ i
printk(KERN_INFO "LED unregister!\n");
; `- b6 B0 o% }( T; `5 p7 t. `}% T$ K, w# N5 }& m; y, X" k
3 C2 H# q4 r! D& V) Ymodule_init(led_platform_init);
) ^0 Y0 P M( @/ h$ Y% K4 p# W" xmodule_exit(led_platform_exit); t- i) a% A4 V2 @; Z% R) b( c
. I$ ]: D7 o9 _2 T7 h2 t4 C$ o
MODULE_DESCRIPTION("Led platform driver");
/ c( R# v; A3 L l7 jMODULE_AUTHOR("Tronlong");7 k" \4 k' \8 l% U
MODULE_LICENSE("GPL");: r* m- y' }* _5 G
% z# N+ Y$ g% q, E5 L8 ~! Z
|
|