|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ X6 O" l! t; `0 ]. \+ e% C
#include <linux/init.h>
4 |6 _9 s( o( _5 |6 R6 x6 ]#include <linux/module.h>
' |( l& a- j# D: j3 n3 A0 y#include <linux/kernel.h>; U9 S- W9 v( \) V* a$ e* `
#include <linux/types.h>
4 H# h! v" p9 ^+ Z5 T#include <linux/gpio.h>" }( z) V" o$ W% Q6 S
#include <linux/leds.h>( f' m) C, @9 R' U
#include <linux/platform_device.h>
, {2 w" g' J: A5 t1 M9 a; c
% V& P) d$ w: }% n9 u d#include <asm/mach-types.h>
5 _7 @9 r, W4 B* t. ~1 {; b#include <asm/mach/arch.h>2 r! M0 s8 N8 B# H0 c7 K% U
#include <mach/da8xx.h>! Y& S. f5 Y1 y% L0 S
#include <mach/mux.h>/ D3 a/ w( z& }* G% M6 x o
# W; R+ S( h8 a$ c( J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! Z7 X9 X( G1 R2 v/ v2 @! Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* q, \( H% c5 n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 {# c+ l! t! G r, O, S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- N) g' M, ^- h! h! n( e [, K
, d N S/ G7 o3 v8 }+ e
/* assign the tl som board LED-GPIOs*/
" X" b4 U% ?( @9 z) Z8 g$ \; E, vstatic const short da850_evm_tl_user_led_pins[] = {
6 s p$ f' c# n7 v/ { /* These pins are definition at <mach/mux.h> file */
/ ]; W( c# V$ S/ A+ y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. x" ^0 @0 y. k! N, ^+ b -1! r; e& F+ o1 }0 ?- l
};6 C8 X" u3 B% X5 T. T5 c! [% {
; ?/ Y" m3 e/ p* R# H$ _% Ystatic struct gpio_led da850_evm_tl_leds[] = {/ F8 ]" @) R# W2 h/ p! }% X
{- S& r) a' u6 p* r$ O. u: Q
.active_low = 0,$ ~( F: i7 ^4 Y9 k
.gpio = DA850_USER_LED0,# I. ]+ f/ s- o9 x9 i, t! d: o F
.name = "user_led0",
: J: r1 V# j7 c5 @8 w- ^ .default_trigger = "default-on",
4 x! k$ i; l9 _& { },
6 a) y( b ]* q7 T {
* B; s5 Y6 `% N5 p# @9 Q, M* \2 K .active_low = 0,
) ]% Y# v: l9 {$ k! k8 K .gpio = DA850_USER_LED1,
8 m# _ m% ^) m, a+ X8 F1 C1 Y .name = "user_led1",2 @0 a" j2 N6 q( b* x
.default_trigger = "default-on",+ I" N$ }. V* t- F( r
},9 T0 L* e* U1 F- n
{" a2 _3 Q$ p7 o' ^! H p
.active_low = 0,) e+ T9 u c1 l& X* R9 w
.gpio = DA850_USER_LED2,
1 G) i3 h4 _( B! E .name = "user_led2",
4 J! I8 i( ]+ G( j* a .default_trigger = "default-on",
+ {6 B/ r" y6 _0 ]7 e+ L, { },7 l- T# u! _" U5 K* K g+ V
{
; z3 g. A. T6 O .active_low = 0,
& C. {. t7 x) ]7 U2 m5 Z .gpio = DA850_USER_LED3,
& B2 Y( Y% k! p+ ]' K .name = "user_led3",+ B. t/ W6 Q. q6 x' Y1 k* I) k
.default_trigger = "default-on",
* f1 P4 ?( a* e. @* O- h },( e9 U3 K9 t% u' }/ Q- @
};! s6 `' a X4 x
. e3 |$ G) C) C' Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& z5 \' a: `" `) {9 E1 e" o
.leds = da850_evm_tl_leds,
. O8 _: d- V6 h% O( k$ v .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% B* @; ^6 N" V) y8 p( c};
. x8 ?% V1 N; o1 N. z
$ K+ Z. Y3 {( V0 C: P0 Vstatic void led_dev_release(struct device *dev)
5 U7 z* ?+ e7 T9 M) J/ T( h{
& Y9 `2 h% N. Y# m8 K};8 D. Y& ], [. L/ Z y/ z' f! ]
$ L; q1 ~* X) W7 |, {3 Y* [
static struct platform_device da850_evm_tl_leds_device = {
* X" n6 K( i; J. n4 O .name = "leds-gpio",4 M1 T& ~ p, K( }9 [
.id = 1,
+ d+ P* ~! @" k+ V .dev = {9 b/ M. c& o ]5 `4 L
.platform_data = &da850_evm_tl_leds_pdata,
8 R8 ?' m5 Z5 l3 v1 U4 T .release = led_dev_release,
" A% ?3 b, [. j! J" G; H8 p+ y }0 U! B( A9 T0 T2 i1 m" S+ X+ B: m
};0 `$ _1 _* R/ r% M5 P4 h/ [ H
8 g/ A3 g0 ]. P& v' m0 ]8 ustatic int __init led_platform_init(void)
- Y$ G0 T% \. D. U* a9 C{
' Y: F2 F9 m4 Q/ ]4 m int ret;. E$ l9 n6 Z" u9 X' `
#if 0" b4 _9 p. ? V' d- [* I/ X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 ~1 I) a. P5 T if (ret)% H2 w% A& I. b3 |0 C' B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- X8 W, N8 i7 P" o% s4 x/ M "%d\n", ret);
' X. Y) \$ U4 S2 m5 y#endif+ |* \& X" ]- X. b- `
ret = platform_device_register(&da850_evm_tl_leds_device);+ B' I! V f" |1 W
if (ret)
3 O6 u' F% e! x( y& y* q pr_warning("Could not register som GPIO expander LEDS");
0 @& k% M& K% a) J$ q+ w6 M else% y% X: \. l2 `* M
printk(KERN_INFO "LED register sucessful!\n");
+ i& h$ K4 `/ h' A" _8 `% A$ s0 T+ {+ |$ W
return ret;
! S; K: _; O3 T5 c0 P- ?+ [}
( T6 U6 W! K1 X7 y7 ]0 L% N
7 Z0 K4 {% P2 E# [* ?5 ystatic void __exit led_platform_exit(void)" q5 n: B* a+ u; ?+ ?$ M$ C
{# n9 K7 R. O7 t' A l/ {
platform_device_unregister(&da850_evm_tl_leds_device);
* m9 ]9 s: |, x$ T0 F7 v+ f( R' n! r. i5 U3 U8 c! q6 u
printk(KERN_INFO "LED unregister!\n");
: B+ t0 k2 S7 R9 D# H5 o' Q- U: a3 v}
a+ W. f' L& P' m* |" ~, X* Y
+ |9 {, W3 W7 z$ R7 |module_init(led_platform_init);
3 s1 U( v+ O, umodule_exit(led_platform_exit);
% F" ]5 Z- ^( B( F
Z) y3 f8 D$ w+ z. lMODULE_DESCRIPTION("Led platform driver");
1 G6 M) B" U! _2 T. o; `9 qMODULE_AUTHOR("Tronlong");+ {% y6 A1 L) B% t3 G
MODULE_LICENSE("GPL");
; Q0 w S2 }! O& a
; k2 |6 D+ z* m4 D' w% p5 q, _ |
|