|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" v5 z5 z# r8 d+ T8 k#include <linux/init.h>
g! H, B3 @# J: \- |- k4 w#include <linux/module.h>, x1 T) A' u. Y& ^
#include <linux/kernel.h>
& D8 P/ b6 l) @ l#include <linux/types.h>
}9 s( m5 b5 w8 [, d: r' a0 C#include <linux/gpio.h>. }7 Z! p2 v, v/ z. M
#include <linux/leds.h>5 o6 ` c: B, f, Q" g
#include <linux/platform_device.h>
' p; x3 {) {7 r, w6 {; F
" l8 v0 u7 d' m$ K, m#include <asm/mach-types.h>" W. |; B/ C n6 @. y$ v6 @
#include <asm/mach/arch.h>8 y7 i+ X2 F* s
#include <mach/da8xx.h>
1 [& [& u9 E9 N* O4 D- ]0 k#include <mach/mux.h>* x. A/ B* f% P1 E; J
; ^8 r$ U+ h3 @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 c9 S7 F$ f4 W0 m- ]#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 Y" [; M; Q- V. f3 g& |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 N4 ^: o/ }& u5 u. G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: f$ M6 R3 i; _2 B7 Q4 O3 n0 I3 Z) c2 X
/* assign the tl som board LED-GPIOs*/
: D s" t& Y, y8 v6 g4 h( }, Vstatic const short da850_evm_tl_user_led_pins[] = {
9 f4 {; \" e3 i7 U /* These pins are definition at <mach/mux.h> file */: a' A5 r, Q+ D0 M. U: L/ w( f. U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 T; L/ J* r/ W5 p& y& ~$ d -1
4 ]' b! u* ^/ l) k};8 D" k" W6 Q5 U# d% R1 l
* ]7 U) N x. Z) `
static struct gpio_led da850_evm_tl_leds[] = {4 p, J2 A5 B1 D/ F5 y# l
{
' {- Q5 i! a5 H5 M5 K0 d4 x3 B0 f .active_low = 0,. S/ n3 v9 W( ]% z" J9 w9 F. k
.gpio = DA850_USER_LED0,. d0 E6 f( E( o. \# s! @' H' i
.name = "user_led0",
0 \# o; g8 h4 M, o' k- v .default_trigger = "default-on",. x% m4 f- o5 G- V# |( k
},0 ^: M z3 Y6 a7 [( k9 e
{
6 T1 y5 {2 M3 V% S8 a2 k .active_low = 0,0 P( k8 I0 B0 M; H
.gpio = DA850_USER_LED1,
0 W) d1 z, {( m6 Q: N1 j% v .name = "user_led1",; D" t' v* O6 N5 p
.default_trigger = "default-on",$ [4 t" u0 i5 g# }% e
},0 M6 }% a) f4 O( M, i
{
+ J5 ^* l5 P8 A! R/ T: W7 { .active_low = 0,
9 q! f+ A( }5 c2 _ Z' k .gpio = DA850_USER_LED2,8 [# F/ W W; O* Q2 _( b; g
.name = "user_led2",
( _1 z% j/ z% `; z% P# y .default_trigger = "default-on",& e5 P' j: _6 T
},8 I6 ?# n* U' h, y
{
" s6 Z9 H0 O! k6 b0 L$ `( I" Q .active_low = 0,, L3 x* d1 G: k8 H
.gpio = DA850_USER_LED3,
6 w/ O! l( l5 A .name = "user_led3",* T2 k, K8 B3 M/ |2 [
.default_trigger = "default-on",* Q& o# J. ~% v; m. M
},
# B& j4 \4 u. B8 ^2 L! T};% `' b) p; A0 Q
; a ~ e' |5 T; x- m* k7 y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; u$ o# G0 d3 ^. n) J: d1 W" \' m
.leds = da850_evm_tl_leds,
: O, w. s: \/ s/ k! j% s* @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, h2 `) l7 K3 I
};
@; K; s5 i R# j- h0 @& M( d( w) f
. o; a/ x, b9 Q Jstatic void led_dev_release(struct device *dev)
# e0 I5 f1 y" A3 p+ m$ x{
$ `. j+ c }: K X4 w};
" o- n" x7 }, ^$ a( `
5 T) F; {6 R( l" u6 Y4 u; ?. jstatic struct platform_device da850_evm_tl_leds_device = {, `! I: S" s2 I. _0 T* w+ r
.name = "leds-gpio",
4 W* o; b/ p* x6 [) n .id = 1,
6 g5 U0 ], p! t& `" {% Y) M) V% @ .dev = {
\! K, M- B) I" f' u) ` .platform_data = &da850_evm_tl_leds_pdata,
2 Q2 Y7 W3 ?( `8 n: k2 H) W% j .release = led_dev_release,
' @9 K* t9 n! j }7 Z5 ^/ a: y% X% R' `9 c( F, [
};
4 V, p8 z8 I0 y) R$ m% r# ^
# n% c$ W# b% Q) sstatic int __init led_platform_init(void)
E' L/ j7 u+ Z+ L. E{" m' x# {& p# W1 v2 k
int ret;
0 U+ _% H8 h: y G# [#if 0
4 f M H0 }3 j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* t% D- T$ }" n4 Q& Z( g if (ret)
4 f8 b* g- s9 R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ F8 r2 q& p' ~9 e! b "%d\n", ret);
/ z# l* I$ k- b: Q3 W8 K2 c# c T#endif
. |$ x% Y1 R$ `/ p ret = platform_device_register(&da850_evm_tl_leds_device);2 E. |7 [+ [/ n3 ~
if (ret)
4 ^9 f4 M: y2 V2 ]8 S pr_warning("Could not register som GPIO expander LEDS");4 a1 D7 n$ H l4 `7 B0 D
else
4 m5 L1 v4 w. A+ C( t; d printk(KERN_INFO "LED register sucessful!\n");
/ z' e( o+ e7 z( M, _+ E; Y- F$ t; V/ A9 m, V( n s
return ret;
+ M4 z ]/ U* j+ f% t4 T3 [}& i' J8 C- m% [: b
7 [3 z) F" V {1 f
static void __exit led_platform_exit(void)$ n& g7 ~& B* r/ J0 U' x5 m
{
2 D0 _0 v2 `8 T3 l platform_device_unregister(&da850_evm_tl_leds_device);3 z r) q- F( x* T
. d' L) z! `7 l& b* v0 W5 ? printk(KERN_INFO "LED unregister!\n");
" M8 ]' O! P4 e- e9 n/ J7 G* q2 x}
% n8 @, _) Z5 L2 Q. V$ Q+ k: ?3 j
module_init(led_platform_init);! B- o7 x1 A9 ?: T- j4 P
module_exit(led_platform_exit);' w* [% U/ G5 j. ?( ^7 A' s2 y
9 B9 G& o( ]5 SMODULE_DESCRIPTION("Led platform driver");
6 S, w6 G! Y/ m, i$ Z( t9 v0 BMODULE_AUTHOR("Tronlong");0 q( p6 J _# K' z+ J! V( D
MODULE_LICENSE("GPL");
6 f( E+ f8 E. | V- |% T9 [3 f3 v( L" _7 S* G
|
|