|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ U* {2 _2 u+ F( D8 B1 ^. ]
#include <linux/init.h>. H* ]) M2 @# J! m$ ~* R0 n
#include <linux/module.h>6 X$ K9 M$ _: w
#include <linux/kernel.h>
, Z- u/ N6 p/ i$ G3 A+ I#include <linux/types.h>0 G- E$ C K* O- `1 S- j' {
#include <linux/gpio.h>
, t' k+ G" d! v: n#include <linux/leds.h>
- f3 z) D% A, A: \8 ]1 A+ ^- h' F2 s#include <linux/platform_device.h>
/ d0 g; L6 H& O2 Y6 v5 Q k( T% g0 F% @$ Z" R
#include <asm/mach-types.h>( I3 d3 ~/ e, g: T: R
#include <asm/mach/arch.h>6 {6 _. [1 b, V* W2 I
#include <mach/da8xx.h>
3 a9 H9 U# ]+ O L9 m, I' A#include <mach/mux.h>& J" x- u! v- _& Q' S! ^
7 _9 v; g% K/ R, I& _1 ?3 }$ e% ~8 u, w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 I% Z$ U4 ^* C9 t1 a G' x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. M1 e& w1 ] g! D' d1 N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ \. U; f3 f5 C7 _& N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ F2 h& Q: X% D
% Y/ u# c; K3 x0 X/ O
/* assign the tl som board LED-GPIOs*/
; w5 n& F; g3 u0 f, D8 nstatic const short da850_evm_tl_user_led_pins[] = {
! }4 I$ z9 _2 A# L; Q: n /* These pins are definition at <mach/mux.h> file */ S+ `$ y6 y: U( m9 Q% c: ?3 n/ K
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 S8 v4 O* j- e$ j. |
-1& j1 P' i4 R! n
};* `# O. l- J3 S( ]& o1 A* G+ B' A1 }7 v
( i2 n3 Y- _! H( n% X8 ?static struct gpio_led da850_evm_tl_leds[] = {" y& k- j5 y" J
{9 O0 g$ V# {( Z0 N/ J
.active_low = 0,4 P# l9 p" g: [7 T7 f1 ^
.gpio = DA850_USER_LED0,
! U/ D2 f1 ^- g. l C! ?' H' z .name = "user_led0",
: T: m% ~$ P; J2 Q6 h .default_trigger = "default-on",
. s- Z0 Z' K) T0 c2 z- d* Q },+ F& N8 N2 I% D( \
{$ I! r& d. J$ z6 q* D. h- {
.active_low = 0,
; O4 t- y {) z% f/ T .gpio = DA850_USER_LED1,
/ n- a! N" `" g. ?+ Q; g% } .name = "user_led1",
# V% a# N* @; y- E .default_trigger = "default-on",6 s9 r- k2 _) m3 _
},( t9 a# V) B5 o2 [
{7 l/ o, [6 c3 ^
.active_low = 0,
; H$ E0 z$ h8 Z; g- w: E5 y .gpio = DA850_USER_LED2,0 b# [$ @0 B G4 b5 q0 y2 q3 Y% B
.name = "user_led2",! V! b/ x, G) {; o# t" K0 P9 {; M" t
.default_trigger = "default-on", t- G0 v7 C ?" _5 p
},/ `1 X* b J/ ]: K4 X$ o& W0 K4 }
{
# ?. S1 z7 q/ S$ e4 k .active_low = 0,5 |" q& @6 T0 ?( D- |: q' M2 F
.gpio = DA850_USER_LED3,; I2 F& P+ c7 s7 g5 N
.name = "user_led3",
# s2 F% x/ e0 O5 f' k* i; A# \' y .default_trigger = "default-on",2 r, x2 p6 n% v# g n" K
},8 [2 H( l1 O, z6 @' m
};0 L4 E* a/ l; Y9 }5 i* j+ R0 W
( ?2 ?' ~5 W k8 M$ S% [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; H" z) _" O8 T: l1 t
.leds = da850_evm_tl_leds,1 B( i" |1 T/ Y# _1 S3 q" T0 m9 n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& h; Y& _" u' C5 n5 A; w$ e
};7 J/ g& a5 S, F I7 i
; ^% S; p* l9 \, V( b1 O( `: |static void led_dev_release(struct device *dev)1 i( H, w/ K7 ?' M9 f4 S
{
$ t7 C, [; E) W# x9 W* g};$ ?* j3 J; y- f8 c& h
: V) d- n& p/ D! q4 {
static struct platform_device da850_evm_tl_leds_device = {
7 ~; h2 \2 K9 r- V2 y .name = "leds-gpio",/ q# W: y% @) U1 ~/ S; n/ @8 n
.id = 1,! Y2 U, N) w; U9 F3 H- U; M
.dev = {
- ?4 {! i! q4 T7 E7 ^' H) J; m .platform_data = &da850_evm_tl_leds_pdata,- N3 u, B/ H7 C! _) S9 ]
.release = led_dev_release,
& y3 D1 Z# n: Z# d7 }( i! [- X7 h }/ i7 |6 _0 u. P3 o; P0 G9 `
};
+ V9 J$ _* d. ?2 P' \ [1 _0 J7 q' S# F1 Y4 r" L! A/ c
static int __init led_platform_init(void)& w( N( x4 z4 l6 e" d; a
{0 z6 j% v& R: v4 v5 H8 k
int ret;
6 e q4 ]) n; g3 K( b( A7 I#if 0! ]( U) _% K6 {5 _2 b8 ~, z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
?# E8 {: r3 f# a if (ret)9 N0 d8 V' L: y. b! A% N
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") N: ~) T- u9 `. \" U: U
"%d\n", ret);* V4 @& o2 ]: r6 R
#endif, z* U; y. b4 L9 U4 U! e
ret = platform_device_register(&da850_evm_tl_leds_device);
, {! J1 j, y* M* D. ` if (ret)
( Z9 Y( q, b& V5 p pr_warning("Could not register som GPIO expander LEDS");* C" g2 g; H- q* c
else
* a- Y. G+ E3 O/ V5 D1 a8 t$ n& C% \ printk(KERN_INFO "LED register sucessful!\n");
8 y) c8 t4 r0 m! ?, J* w1 r" R. S1 I
return ret;
. Q% k$ ^7 f3 ~}
0 T2 t) P) o! I
( c0 T* [$ z; t- cstatic void __exit led_platform_exit(void)
* T7 y6 x1 n9 r3 b) i{
# E$ Q0 q/ @+ Z3 F* m5 v platform_device_unregister(&da850_evm_tl_leds_device);6 h0 F( V. R, s t: s
1 o8 o3 S4 }! i- x- } printk(KERN_INFO "LED unregister!\n");% E, E4 \+ Z4 A
}
- y- X8 q' a# M) D+ G+ J9 h) m- C/ X% j1 [- E+ o' P
module_init(led_platform_init);
8 y% K! J2 t6 E9 Z! _9 L/ dmodule_exit(led_platform_exit);4 h* D7 U4 x% T3 y- @
8 T' w' w- ^3 u' dMODULE_DESCRIPTION("Led platform driver");" Q, X" {: ~$ J$ k2 H/ O4 H4 v! o
MODULE_AUTHOR("Tronlong");: m4 {6 `/ h/ ]$ ?# p+ ~8 l O
MODULE_LICENSE("GPL");
' V3 Q J" O; B/ V$ X' O% R7 |1 F8 |
|
|