|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& x+ z7 P- ^. t% N#include <linux/init.h>- C5 |+ @$ g# d& f% X; h0 N4 B( i
#include <linux/module.h>) X- n2 u) ~$ [2 v* }! g* Z9 L
#include <linux/kernel.h>
& T6 { t7 p& L% W# S, S#include <linux/types.h>
9 o' }% c. B4 A! D) B/ m#include <linux/gpio.h>1 T8 ^# ]6 R3 G, \
#include <linux/leds.h>
+ v7 W$ s: @6 I5 y9 G* U& @#include <linux/platform_device.h>
3 ^7 w( }: _, {$ k7 Q
`. y! P v( Z, V- f' m( q#include <asm/mach-types.h>
- `" o' i2 c" ?; Z" J#include <asm/mach/arch.h>
; c) @' q8 D4 G#include <mach/da8xx.h>
* s3 a* p( S7 {9 F' X3 p8 e#include <mach/mux.h>
G5 y. `; r) o; d
, h" w& l3 m0 \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' T+ w7 P5 z; @6 M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 S w2 l! @8 K4 K5 {+ r2 r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, T! N/ E8 n) n Q6 h- \2 D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 y. E/ K- v6 O) K7 u3 y F, E6 \$ B- U6 o5 H1 e5 t
/* assign the tl som board LED-GPIOs*/, m4 ?' g0 @ F# S$ X& M# z, z
static const short da850_evm_tl_user_led_pins[] = {
2 ^4 Y$ b, r" @" q! r% Z7 o( r /* These pins are definition at <mach/mux.h> file *// d/ I3 u# L" v9 J2 c4 Q7 a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ X1 T0 I7 F2 }, R
-1
% T( n: v! x5 L5 F+ J};4 m( A% u: T2 u0 l
/ x2 w* V- ~/ R6 Z
static struct gpio_led da850_evm_tl_leds[] = {) `8 D9 ]# l1 e6 G
{
/ W+ q* f7 G; W3 F& S( B/ j; v- r .active_low = 0,
% [2 R( I7 X q4 `$ u .gpio = DA850_USER_LED0,
0 F( D/ C$ O" Y& ~0 K r .name = "user_led0",
0 B0 v0 \6 u. j9 c3 `# Y .default_trigger = "default-on",
2 S/ j6 o7 Y# p) C7 Q/ q$ B6 D },/ O# N7 R! B7 n4 V5 m, O
{
# p* J. J y8 R( j7 y: h .active_low = 0,% L0 I% T9 j, i0 k* R+ p- ^
.gpio = DA850_USER_LED1,7 s0 O" B( v! a; j( s$ X- P* }
.name = "user_led1",
7 n: K5 `7 s) F& f; i' ? S2 e1 R .default_trigger = "default-on",
- m( B5 O, r9 l' Q# Q* ? },
1 S8 l5 V/ i6 w {
, B( G, @5 O: P' d3 N7 F' W .active_low = 0,
# Z* l5 o0 H' H .gpio = DA850_USER_LED2,
$ b7 y; ]1 h( O( m .name = "user_led2",% W+ q) A; z" f9 z9 }8 O
.default_trigger = "default-on",% S9 p7 G8 o/ ~/ r
},$ A u/ x2 n& B/ ?
{+ r8 M- y* R Q
.active_low = 0,3 v" {1 Q- W; C; @' l5 ?% P) W
.gpio = DA850_USER_LED3,1 }+ R1 ]9 V \1 u) M' W
.name = "user_led3",: }% U0 d5 D$ m5 [5 J: H
.default_trigger = "default-on",
1 Y7 B) t, o& w; d0 r },
3 f* f6 G7 I8 F% I- o( i2 l};9 z* K6 D' m. J. F
) Q$ |* n$ q/ }' v/ z) z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" z/ V' @; b' v; \! r8 x* h .leds = da850_evm_tl_leds,
9 W" i* b' \, E1 L% ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# e! @! q7 s' n1 `" K
};* T" B1 [0 L4 {2 P+ h2 s
! `* Q; I0 l3 f0 Hstatic void led_dev_release(struct device *dev)$ a* E& ?) d$ P# h6 ^# N9 o4 S
{3 ?2 ?0 o* x! U( }
};
% [* H! w! A$ U8 g7 C/ c+ l) J' Y3 [2 W: I
static struct platform_device da850_evm_tl_leds_device = {
7 m$ h- S0 s0 C# Q) P .name = "leds-gpio",1 i7 S- r- \7 A
.id = 1,
* c- R. m# B/ |! J6 Z. O .dev = {& I+ h$ H5 [0 W. ~3 I) Y
.platform_data = &da850_evm_tl_leds_pdata,
* v' P0 d& l) `4 J+ E .release = led_dev_release,& Y6 ~. u( B! W# z g( j
}
5 e' `% D6 w Z7 i8 T& [};; v, w( R' @0 @5 d1 I/ B
0 m7 r7 T0 a2 [ u, y1 @. ]$ mstatic int __init led_platform_init(void)
2 y2 f8 I/ y( E2 \( I{6 [. a+ x1 E; d: m. M
int ret;
! ^/ L# f/ t" D9 a& e! w3 I+ e#if 0
9 B# ~' E% l6 M* B: g) K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" y, ?+ t' X, Z' I+ Z+ E T2 d
if (ret)4 U w- \2 }6 x- j+ r
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": W/ F5 I D( g9 C. r
"%d\n", ret);
, H2 e7 H0 Z. ?, {1 P#endif
$ B& f% w0 {5 y' u7 O8 q ret = platform_device_register(&da850_evm_tl_leds_device);
. o& z! ~/ d, M7 m8 D6 w if (ret)
* ~: r; Z4 q% p pr_warning("Could not register som GPIO expander LEDS");2 p4 S+ d7 |& @' a4 W& a/ q
else
3 V3 L2 G0 z/ E! y {5 t printk(KERN_INFO "LED register sucessful!\n");
9 ^/ Y+ Z4 o# P0 W$ m
! o6 ?4 Q7 J }3 q* s+ I4 ~' i return ret;
9 x* s/ k; P: ^4 S# Z}+ R7 O2 k8 k) ^0 |9 ?; X
8 w/ j* L7 x vstatic void __exit led_platform_exit(void)) `% ` t) F/ P$ @9 p6 T1 ^1 ?$ }0 D
{& K/ |& x$ F- L0 B
platform_device_unregister(&da850_evm_tl_leds_device);9 ]1 M* J. t) A- W1 G4 d4 B2 q, I
# A3 Q! j& Z3 N9 F. q: {& ^
printk(KERN_INFO "LED unregister!\n");
3 T: S4 U0 B. L% ]3 b) B}" J0 O e. Q9 v6 G j* R g
, j- F$ ^ J6 N1 |5 ~$ {
module_init(led_platform_init);2 |+ o( P! V/ p1 J
module_exit(led_platform_exit);; Y, {/ X% `, u& f+ {& q8 x* A
2 V- G5 l8 \, FMODULE_DESCRIPTION("Led platform driver");: S$ |: l; F, Q/ H5 K2 A
MODULE_AUTHOR("Tronlong");! a0 w# R0 c0 x6 [6 M, d
MODULE_LICENSE("GPL");9 H; Y3 }8 w1 k8 `, m" v
~& {, T" S' s
|
|