|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& I4 k7 E8 M% Q/ C
#include <linux/init.h>* n+ b5 l/ ?! e2 Y
#include <linux/module.h>9 T+ i9 O5 L& L' ?8 Y/ L1 N: {
#include <linux/kernel.h>1 i9 A/ a4 N% A6 N: p- @' c
#include <linux/types.h>
8 v& z8 F6 z3 T2 J* a& {+ p#include <linux/gpio.h>( z$ t6 u# F7 p! z8 W% _ j) t* p
#include <linux/leds.h>! w' f/ k# i7 A" } M0 P
#include <linux/platform_device.h>
0 K1 k" T5 @, Z0 [8 r. z0 E7 w0 w" N0 ]; ], {4 V
#include <asm/mach-types.h>
4 M" @4 |5 \: F- t( K#include <asm/mach/arch.h>+ v# J" X( h2 B7 l- o4 T% T) h
#include <mach/da8xx.h>7 v- w; D. h9 _$ U: A
#include <mach/mux.h>( X# K# s3 w& v+ F' E8 T
! L/ J, a5 t( j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): l% {4 i& L; u; i6 E; U$ J8 x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' u; J) y/ r3 e3 x0 D1 l2 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 A F5 \2 L o8 S4 [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ C- Y8 E6 a2 d8 W0 c# c/ v( ~2 u6 B* H
, B1 z1 C# [# t2 k" Z( c% i: v4 _
/* assign the tl som board LED-GPIOs*/- `3 z) F: s* }( I1 S# j) c0 f
static const short da850_evm_tl_user_led_pins[] = {9 r5 m! S1 E: ]5 n6 j
/* These pins are definition at <mach/mux.h> file */2 S# l. H; o; A) Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: g9 `$ X: g( i+ S" {5 n -1/ g' u2 r0 Z9 u- K; E6 ^5 O2 j$ y; ^
};
+ o6 i1 D; I5 @3 u: Q
B% s* w0 E; A0 k' Lstatic struct gpio_led da850_evm_tl_leds[] = {8 F$ ^9 o* T' Y
{2 \7 e4 S4 ?( l- a
.active_low = 0,
* a" x% Q# R6 b .gpio = DA850_USER_LED0,2 v; u( k9 f7 d
.name = "user_led0",8 S, Q7 O# e! v' R& x Z# Y
.default_trigger = "default-on",
& q/ `* r$ R1 { f! V },% y3 p7 r o, o; N `, N
{1 c. c# @+ v7 }* Y
.active_low = 0,9 n8 R, R0 u c1 z
.gpio = DA850_USER_LED1,. T6 M# L' K" y R$ N6 r/ r: W% L
.name = "user_led1",
" l+ t) {" ~3 p: W, C# E .default_trigger = "default-on",( [6 m- ]: C+ a$ H5 T1 k, b
},( F' P8 N4 l5 o5 K7 q
{
: a7 m: v5 y7 m; N/ q8 v: \+ V .active_low = 0,
: t; ?' l/ g* P9 @% b2 o- }4 L( n2 \ .gpio = DA850_USER_LED2,/ [2 z. t) z9 r* p0 T4 Z. j
.name = "user_led2",% j; f- G' {5 I
.default_trigger = "default-on",
$ d& Z# B& j+ \8 I& u0 R# f/ n },8 L( k5 r0 X& `6 ?
{
' X+ U: h1 X6 s( W/ A .active_low = 0,# v" ]" ]% B9 D& \$ D/ v* F
.gpio = DA850_USER_LED3, x# g3 O/ U9 a0 u! O# R0 b
.name = "user_led3",/ |$ H" _$ m$ I# K+ P
.default_trigger = "default-on",
% N [+ P* \& \: P9 E7 ~ },
2 j$ K7 Q, L& F5 ?6 d- I};! r1 h+ \ Y# _* H+ ?# ]
- K# Q! A, g/ z0 Z0 m% a1 J, I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* t) |" C1 C* @7 @. i' f .leds = da850_evm_tl_leds,, H7 g* P) L& c. V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; a) I5 t7 z2 w1 H};
) z1 O; c3 x+ z* F8 | g$ D4 c
e! W" E; c- q% d! Q; @! tstatic void led_dev_release(struct device *dev)
0 c. t7 \. R8 R4 E5 _5 K$ N2 j. s) ^$ f{
- M9 q* |# ^9 E& w8 n' n5 M};( T5 s$ A! ], X
" O+ t# _5 N2 W
static struct platform_device da850_evm_tl_leds_device = {5 R/ v/ ~: g% M: I& Y" n+ f
.name = "leds-gpio",
/ g2 z7 A. x3 d. m .id = 1,
+ ~0 E* t5 y6 i) W9 q1 _$ W .dev = {
- q4 f/ v7 l* w0 G( N .platform_data = &da850_evm_tl_leds_pdata,% s* s" a6 [9 k2 {. |( N1 m6 n2 @6 Y! n7 c
.release = led_dev_release,8 M: p6 |: L0 Q
}/ n: G8 H# x! d7 [4 b; L
};# e% N: I5 w6 u
3 m" q* M2 j+ j( n
static int __init led_platform_init(void)7 P8 Y9 h! Q- ~8 U& {7 m$ f
{! t: _7 ]+ H, Z& |7 p& Z! o4 H; T4 g
int ret;
6 Y, t* U- v1 R4 o# z/ c#if 05 @9 m" Z2 L |% s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ B/ s- M, \/ ]) v if (ret)
2 ]( ~6 h: H1 H" l# g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; d9 t1 k- f, F; l- e7 d "%d\n", ret);# g2 n3 J. C8 r! K. P
#endif" S; q! ^* u7 P Q6 O
ret = platform_device_register(&da850_evm_tl_leds_device);; o, U$ t1 o0 }* L+ r- H
if (ret)
) y( X5 M/ C% _* U+ U pr_warning("Could not register som GPIO expander LEDS");8 u/ x+ T% @ J5 V* L1 `; X
else. O/ S7 v, K+ o& y* T$ m+ Y; g
printk(KERN_INFO "LED register sucessful!\n");/ E5 W( ?7 i, C0 ?
+ G$ e: I, t0 W% w+ u
return ret;
9 k- I: o" l& ?9 K0 _}
/ ^6 F; W0 d9 ]4 e
0 H9 H, I7 K; N' w- M! sstatic void __exit led_platform_exit(void)+ n, x/ I, \# H% E
{6 x! x7 f Q* p- W
platform_device_unregister(&da850_evm_tl_leds_device);, k& t! O `1 [. G+ E- k/ a
( ^3 u# E) M7 n; ` printk(KERN_INFO "LED unregister!\n");- x$ E7 H8 V1 n$ B# [# a1 E6 R
}
1 E, F7 s- x. e- H6 W/ W2 r& x% k% P2 b& z6 t$ O: q: j
module_init(led_platform_init);
" b7 p: o" F. J& m$ R& ?& Lmodule_exit(led_platform_exit);
4 h+ Q$ H" R4 R- H
5 D3 C% W/ G7 D1 x1 jMODULE_DESCRIPTION("Led platform driver");; C }' F6 J. t- E L
MODULE_AUTHOR("Tronlong");) d* d0 y& m& F/ y* I# g
MODULE_LICENSE("GPL");
) f& M3 k6 q: M* d. E; n; _ @! e; Y! t* o4 E. c
|
|