|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 M' I" R: W: o* _
#include <linux/init.h>/ N0 C4 ]: F N5 a' v; z
#include <linux/module.h>
& `& S9 Z- U8 @7 Z$ B#include <linux/kernel.h>
6 x5 H, N5 j4 o0 D3 R- Y#include <linux/types.h>
" O+ q7 w1 t5 C5 y) W4 v, r; x#include <linux/gpio.h>
1 |! t3 w* g) {- s#include <linux/leds.h>: `+ L4 e7 X- w/ l
#include <linux/platform_device.h>) ?( z, N8 a `" W6 i0 w
- A6 B7 t# X8 n8 b
#include <asm/mach-types.h>
0 K* \: l/ A2 F$ U% M$ Q, F5 q& A#include <asm/mach/arch.h>
* P( z( g( g# ^; D6 ?#include <mach/da8xx.h>
# N& Y; \) h8 |; S; c#include <mach/mux.h>
( _2 J* F4 J! e6 M5 }2 Z
" F0 d. a+ s+ {/ k( g" ]$ ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 ^- `" b/ z9 x& X2 P5 t$ `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
g s1 D+ `1 O5 J7 y, z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! v5 U- _) F8 J$ N8 P2 E. @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- I) a7 Z2 b" }
' h% @+ d. |) @# y }
/* assign the tl som board LED-GPIOs*/) Z1 k) h, ^* t5 R$ Y. }- Q7 G
static const short da850_evm_tl_user_led_pins[] = {+ `+ h2 }, J* B% P" p
/* These pins are definition at <mach/mux.h> file */8 ]# P; g/ C A2 C6 R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 E* }( l7 v2 S
-1% z% B6 J, r, S" L
}; `4 K& T6 K5 K: i$ T2 H
, k% V" V. s9 k$ h& \9 J, \& f0 Istatic struct gpio_led da850_evm_tl_leds[] = {
% u( Y3 _7 ?9 U: E! Y' j {
/ A, z- K# w4 H8 r+ s .active_low = 0,, n$ r- D$ y9 `7 c
.gpio = DA850_USER_LED0,0 Z4 M9 U5 e. B) @) Y
.name = "user_led0",
: K3 |3 Q8 p% q+ f# D .default_trigger = "default-on",
+ L" U$ C. K, ? m' B1 Q: C& b; c },5 {8 W2 w) y/ f* a3 U/ }8 o
{( N0 _! [9 _- y6 {9 M: X, p
.active_low = 0,
- h) F( F- l) o* O .gpio = DA850_USER_LED1,
3 Z$ h9 H, ^- |$ o .name = "user_led1",+ x5 O# d8 h5 U' L
.default_trigger = "default-on",
+ w2 N5 s* l- `0 U1 }( P },
. ~- f1 a) f7 `/ `! N* k {
2 l1 i5 t! k) b }( b .active_low = 0,3 K6 U" V/ Y) U# w
.gpio = DA850_USER_LED2,
9 F9 |9 _2 q; }' R R1 k .name = "user_led2",
! l ]2 C1 ?) b& Q8 _ .default_trigger = "default-on",/ |8 m% A, r ~: }
},. ^/ M, u. n1 A, m7 Z+ d f
{4 J( a) D! m: J7 P1 r9 s6 k
.active_low = 0,% {6 U. U. x0 M+ z2 u2 U. T
.gpio = DA850_USER_LED3,
5 m' B* F- Q D7 h9 d .name = "user_led3",
1 `( X) T+ H( Y5 r j .default_trigger = "default-on",+ {+ \7 ~: [9 E8 V, j* X; W5 ?
},0 o! o5 n8 g& s" P) V
};
$ }* x- ] ^& f8 h' U" E h
1 L( Z; d |( E9 e Q) X+ _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 P2 R2 X j$ Q1 r
.leds = da850_evm_tl_leds,
9 J7 {. s% j2 E5 @; g0 S& p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! Z5 V0 E, V; V p: @ d C};% p( r- R1 I/ E
% I+ x5 a7 v& b8 C
static void led_dev_release(struct device *dev)
* b1 b9 e s$ a{
+ ~) P9 f+ c9 t2 w" L* A};" M9 |. o# h4 }2 w0 [: ?' Z& `) s& e
0 b6 ?# O( y' T) M
static struct platform_device da850_evm_tl_leds_device = {- M; T" |! |2 Y P
.name = "leds-gpio",
- ~; g$ W9 j2 \! s- D. U .id = 1,
) O' _% r- [! q$ C* c .dev = {. I8 u, F7 g2 n; o
.platform_data = &da850_evm_tl_leds_pdata,
1 O, R) q- z5 |( {( s .release = led_dev_release,
; i% u* C7 s$ T0 G. p o }
' x7 {3 u* o1 r};
% [3 W6 L+ [: R! T/ x
6 O0 L$ v9 h- ?- I3 M/ Tstatic int __init led_platform_init(void)) }) C6 F3 R6 R' g7 w: _
{
, d8 B7 e9 K+ I( P/ v4 s4 m- \2 P int ret;
4 W% ]8 d! Z! r, Z#if 0
) Y) O2 p* t5 e6 x& j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 u! J4 ~; g ^7 r2 E/ Y% D) C
if (ret)
) [4 L0 a+ J8 |6 U# e; X& d7 Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 R) G: h9 u0 s/ ^- ` "%d\n", ret);
- e3 k! n- n- {% L( x c* ^6 N0 r7 v2 k#endif
0 K7 g D% {2 v8 b7 D ret = platform_device_register(&da850_evm_tl_leds_device);9 s: [" O- a0 k# M& d0 }4 W7 ~) k" T
if (ret)
) G( W( F& x! ~. q s pr_warning("Could not register som GPIO expander LEDS");
* g6 Z& c5 w) T% m- m' \3 M, E else
$ O$ t1 J' m# |# I. s/ p% N( l printk(KERN_INFO "LED register sucessful!\n");; G5 `7 @# Q" L0 y$ k
/ _. ?% l! F& I0 o8 ~/ t
return ret;( s" ]6 p/ x$ C1 N% n
}
* X ?9 l. N+ Y9 j% P: l; p& M/ }/ t$ j5 i8 u$ r% ?
static void __exit led_platform_exit(void)7 r7 [+ v, w. B6 c" M
{+ X& Q( H9 a3 T( o- R
platform_device_unregister(&da850_evm_tl_leds_device);# p. h1 [" \ j8 A4 i4 ]
N3 T" z% V( i4 H" k. x7 p6 Q: u- y" m
printk(KERN_INFO "LED unregister!\n");) B1 x ~( V8 y0 S% S) A/ N
}
1 k) T# r+ g K0 f* O f- N! `! X- \7 \/ W8 P) A
module_init(led_platform_init);! _0 I) |- q4 `- m$ \# `7 B9 j. o
module_exit(led_platform_exit);. X; L$ ]1 S. a: ^
# `$ k7 |- j' ?0 q9 }4 {; b( ?
MODULE_DESCRIPTION("Led platform driver");
7 }1 }) G; b8 U7 zMODULE_AUTHOR("Tronlong");
% T7 i- }7 W! ^MODULE_LICENSE("GPL");9 G# c& c" z P' r7 V
: ~2 C( _5 n+ F0 a H S$ `. W
|
|