|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ L' v3 L+ N/ t# j2 Z4 f9 r* V6 \
#include <linux/init.h>, r; D b5 q6 w. F9 ^& Y$ I9 I4 W) F
#include <linux/module.h>
, j6 u- { _* i#include <linux/kernel.h>: _+ n1 J" m3 `6 ?1 N# [' m+ T
#include <linux/types.h>
/ q' x& F {, k) F#include <linux/gpio.h>
% B& i$ x! f$ G' _" \#include <linux/leds.h>
/ p1 f- s, R- ^#include <linux/platform_device.h>
" D7 R) [9 b' Z! r2 N! X- t6 A# B9 Y, B+ p9 `. j$ B
#include <asm/mach-types.h>2 N- _$ |! z m0 i& L2 h
#include <asm/mach/arch.h>
. s5 u) X4 C8 G/ L7 d! o r% N#include <mach/da8xx.h>
0 n% T1 a$ U3 S- E7 }8 g#include <mach/mux.h># s( y3 _* z+ q+ O% W1 k
# N3 B; ~2 g1 D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 f6 o" z4 C' a. n8 t( P6 W# W+ g( I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 R0 \. t, |- v8 N/ T6 G( w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 g" R; ^' G! V6 d- ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 H. Z- X; m8 i8 }+ {; `! L9 `
6 V* s0 O D) Y
/* assign the tl som board LED-GPIOs*/
9 b! ~$ f6 m/ j' t; x* _static const short da850_evm_tl_user_led_pins[] = {7 V4 @$ q& e6 a6 A
/* These pins are definition at <mach/mux.h> file */; S3 I: F: D8 P/ c) H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 Q, ?+ U6 D9 |3 f: ^
-1 }# M+ W" m3 @* U, ^
};6 q% y) m* C% @2 A
8 G4 x# S" J5 S, X$ l! H+ D2 Sstatic struct gpio_led da850_evm_tl_leds[] = {+ m# I) Y) R1 P2 h
{
+ I: s: W2 H! l8 j4 t" {1 Y) z .active_low = 0,/ ~ a3 o; _1 r/ z7 g
.gpio = DA850_USER_LED0,5 \+ z7 i2 {" ~- m
.name = "user_led0",
2 U0 R2 u) C7 {1 H+ r( A( Q# a .default_trigger = "default-on",
7 Z M" e7 u- [1 }8 F },
! ?) j. z/ ~8 k& n1 ] {) l( R% _% x4 c( S, o
.active_low = 0,
, p- ^. s' [; d# O4 y3 y .gpio = DA850_USER_LED1, K4 e) a1 `# t: m, U, u2 s7 @
.name = "user_led1",* O! x1 A& Q- }0 r V" w' H! x# F+ p
.default_trigger = "default-on",# F- G2 T* z4 i7 N: w
},) x' R" l- V" s9 E* t5 c2 M
{
8 U* N2 v1 ^7 {4 v c( Q .active_low = 0,
, s! o: Z G$ G/ X .gpio = DA850_USER_LED2,2 J/ c! @: |& m0 d8 j) t- ]
.name = "user_led2",
5 s- J/ x* v2 f+ S Q ` .default_trigger = "default-on",
% C. m; }3 G% h },3 l3 v$ l, L6 S+ m/ l8 o6 I7 x8 b: L
{ N% R! {7 f% t. ]* m" U3 z$ M& \
.active_low = 0,/ H3 t! u' G( ]' ~
.gpio = DA850_USER_LED3,( i" G1 K! d' X% Y3 f, j
.name = "user_led3",
' H- C: _& T$ P& k: b) F .default_trigger = "default-on",
! `" N) M4 B L' k },! [: |1 f0 B) t- ?
};3 E; T3 I' v% c/ e6 k
, Z a/ u6 v m+ U, I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 |& g) E; f# H& a# ]
.leds = da850_evm_tl_leds,* p; ]- {2 y* T: p1 ^5 n2 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) {& H9 O0 v" T& ?' c};
* T; z0 P8 w# b" _0 U5 e6 d+ g( Y4 C3 }% P# A* W9 k
static void led_dev_release(struct device *dev), b' @9 ~# E. m; T
{
2 x4 P4 @$ T( Y/ y};! _3 P# W2 F: g9 C
2 j& t5 E" p; Q' R& x2 Mstatic struct platform_device da850_evm_tl_leds_device = {" `/ c. y: C5 \: F* O% f
.name = "leds-gpio",5 a$ V- |( m- l4 S2 A: n4 z: K
.id = 1,
. s2 u6 ~$ a4 f! X# X .dev = {
. j. I5 U+ v1 ^; m& c: H .platform_data = &da850_evm_tl_leds_pdata,3 P5 P7 U! S% k+ ]
.release = led_dev_release,- z2 j1 i4 O3 L# S; o
}
" q/ `. A/ B' K7 [3 q# y7 h};
h' l7 K: L7 f4 R, \( _, t+ b: a% V$ |
static int __init led_platform_init(void)0 r' o5 \* Z4 d0 T
{4 j" Y/ Q' h, \/ h# _/ H
int ret;
0 O0 y5 f$ J0 S, C% i" H, a#if 0
4 |+ F* E4 E* U+ T6 ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
H: @) c1 ]" d% F! @ if (ret)
+ O9 ^/ U o% z; T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* \- M0 z: @( p6 ]/ r "%d\n", ret);
& {9 f: a$ ^5 H#endif8 `( _% j/ o8 c4 C/ L6 W
ret = platform_device_register(&da850_evm_tl_leds_device);
, I" b( n% p s% F0 [6 f1 E# P if (ret)6 V% M! `' X. B# S5 j
pr_warning("Could not register som GPIO expander LEDS");0 W1 S$ \: n& u8 t& l( T
else1 L6 b% w n t& d# @) j5 w
printk(KERN_INFO "LED register sucessful!\n");
) a- Y4 O9 x1 w' g' _: u5 m% n- b
4 }, V* f9 H& G, P6 c return ret;
N2 g- n2 N$ i6 _+ Q) g}
4 S! ~0 e* h9 p9 p. q) c
$ v. d8 Q4 M# m! @- A' T- P/ vstatic void __exit led_platform_exit(void); h2 B6 K) B6 p; N* t5 t. H, B; X
{
- Z- r7 T4 v r) \- \' n platform_device_unregister(&da850_evm_tl_leds_device);
! S% J# t2 @# g
- Z, u8 R- I* a3 Z: r3 t$ P printk(KERN_INFO "LED unregister!\n");! S9 Y9 w; s3 L- S _' p/ n* @
}5 L2 ?4 f- Z9 o- s+ U
- L6 W/ ^; P& J+ m6 |
module_init(led_platform_init);
, w6 {$ @" ]4 J- M7 amodule_exit(led_platform_exit);
; C' l: v& y2 i5 v# U( T( i4 `" H' N" E9 A
MODULE_DESCRIPTION("Led platform driver");
! W! x# ~& H1 T, W: dMODULE_AUTHOR("Tronlong");
& X& ~# R" l" F# Q: G7 JMODULE_LICENSE("GPL");
. F5 \& V9 a2 H, c+ Y% U n: ^8 [( g' s7 W6 J3 \- W6 o
|
|