|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. C& i$ W- u/ C" v" L#include <linux/init.h>
3 ~! u6 s9 Y: q7 r, h2 D: x#include <linux/module.h>7 g2 ?* g! u4 k8 i5 M t
#include <linux/kernel.h>+ ]0 b; D% k7 N# S5 [
#include <linux/types.h>3 a, W, `7 F2 b3 K
#include <linux/gpio.h>
4 w8 Q1 f: _# ~) X: ~1 ]#include <linux/leds.h>% \2 d2 T9 q& j
#include <linux/platform_device.h>3 t. c1 m: W6 i0 n
. L6 p J% I: A6 ~6 H! k8 @ T
#include <asm/mach-types.h>/ o9 ~" N+ k! u H/ q6 s4 A
#include <asm/mach/arch.h>
" M& k, U# _0 @) d4 a#include <mach/da8xx.h>
* @* q" @5 H7 t2 V! F# G9 Q3 e#include <mach/mux.h>
! h, G: e! ] }( n$ v9 ]! h
0 ~6 E8 _ D+ Z; G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! h4 M, s# `8 S9 [8 O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 A8 K$ Z& L; b$ s. {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) [$ j; C- c4 B/ p8 K5 N& L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! d1 J3 t& `2 D/ O' z1 m# B
9 P: S2 x# C" o4 l7 P6 q, n
/* assign the tl som board LED-GPIOs*/
9 ~& y' O; C- A1 i! F( p; }. Y, L( j/ Mstatic const short da850_evm_tl_user_led_pins[] = {- `+ m& w0 V D( R2 K5 @8 W
/* These pins are definition at <mach/mux.h> file *// c3 H. b4 [( X; c+ {9 I- @. I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& D; D _' T8 P& } V' j( ` -1
' o1 ^, `+ D7 R' o) J( Z/ j0 v};
* L6 L* ~* @% g) Y# {: W
' N/ `$ H+ y% ystatic struct gpio_led da850_evm_tl_leds[] = {
& u- G0 _, d: u/ a) I0 l {. Z& y" d0 s- P, d) K9 C
.active_low = 0,1 B) n+ U6 H- b
.gpio = DA850_USER_LED0,/ x! P1 B. f" o; M1 W) @2 c
.name = "user_led0",
b- `1 }1 h* x8 }0 l4 p .default_trigger = "default-on",
( p5 R5 x1 S( w1 V1 O4 m },
$ ]9 f6 M, i6 m/ X- l {
) C4 z6 `( p0 ~( m .active_low = 0,# E' N* X- y2 A X" l- w7 G1 H
.gpio = DA850_USER_LED1,4 u5 a# k$ H6 O7 J% r! m
.name = "user_led1",& `# H1 |8 v4 [6 U/ n" k
.default_trigger = "default-on",
9 _' M( R4 f0 F% b },
4 J2 m4 ~. R. s f- Y {
3 E( `9 n Q1 }* V0 o .active_low = 0,7 M. u u) M7 K" G, _
.gpio = DA850_USER_LED2,* f {) i0 c( i5 B( f, h
.name = "user_led2",
7 M" j" C9 U! p .default_trigger = "default-on"," [( B- B* B# l+ t
},
$ A5 H! o. u) I/ ^, d9 a {+ I4 g) V/ o. X
.active_low = 0,, p+ y% D. D; u) V! J( c, M1 G$ D
.gpio = DA850_USER_LED3,* n) n0 O& s. x
.name = "user_led3",
. H; N ?' n' G .default_trigger = "default-on",
' }- I6 C6 Q# h) }0 g/ v" H },& f5 e: }8 k9 X* N* P+ Q% @' ^
};+ j# u& s. |" |3 g
' @: V, ~% T4 g8 t& vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! _" ]* [% E1 v! v5 @! J, q/ u .leds = da850_evm_tl_leds,
6 a/ k; n4 x2 g) n0 M) Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 H5 ^ I. E* m& V
};
( b' U0 ]/ c; O! u% B4 _2 k2 K. a# y! k* l% }% d3 q! ^/ n' J# ^3 B5 G
static void led_dev_release(struct device *dev): r4 Y9 X" O& ?& @* f
{
* W4 {2 `/ {- D* N4 w};
7 r% o" G9 f9 { Z
9 B% w: e: X7 j& r: Ostatic struct platform_device da850_evm_tl_leds_device = {
+ \$ k; o) ~7 ~$ g" m& O; s .name = "leds-gpio",
" X6 o1 \/ S4 c .id = 1,
) S3 [% ^0 q4 _& U .dev = {
4 l- S/ r1 h, ?, k .platform_data = &da850_evm_tl_leds_pdata,
' R4 w4 _& T4 L .release = led_dev_release,
: B$ G# C4 O$ Z0 k' V6 x }
& | H) d4 @% i8 }( C};, W2 j$ X$ b5 N
" R" `/ \! n# G& m: h3 o
static int __init led_platform_init(void)) N& k0 V7 |( a& r% M1 r
{
- t- x Q6 @0 [1 Z+ b6 ]. ?% t int ret;- Q; h3 @. t2 |* s
#if 0
$ B/ c: y; T! C, @, ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% X- d% |/ t) L. Y if (ret)/ l0 D/ y- w4 c& D! S' }% z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ o6 t7 j+ a( S" s5 J0 Y* u
"%d\n", ret);
+ U7 X: ]- i6 K: {3 F#endif2 y- S x& k$ M7 B
ret = platform_device_register(&da850_evm_tl_leds_device);4 \ t; o' V W' M' B% L5 {
if (ret)! k& }: {- L8 K. V( e7 a
pr_warning("Could not register som GPIO expander LEDS");6 A* p" }4 W. ^- H% D
else1 x+ s3 N( N2 Q+ v( D: v
printk(KERN_INFO "LED register sucessful!\n");. ]8 |3 U5 e; j8 n5 P
) Z3 z# t+ _2 L0 `
return ret;2 q; z4 W" P$ ]( G$ m
}3 S$ q Q) k: a9 z: l6 N
3 \6 o k+ e+ R5 V6 ?8 r3 ?7 t/ h& vstatic void __exit led_platform_exit(void)2 q) G4 D- W9 O
{) o* d) `* b9 t6 I
platform_device_unregister(&da850_evm_tl_leds_device);
, a! ?- A4 n M! D' F C, i7 K, Q
6 K' O* i8 q/ y @, c2 z printk(KERN_INFO "LED unregister!\n");
) k& P( P9 C# W7 ?8 e}. b) N& V8 @$ e9 K5 `- d
8 N* r$ A: O& [* ]2 Wmodule_init(led_platform_init);9 x- v2 V- W5 \2 d1 T0 `3 X3 H
module_exit(led_platform_exit);5 A4 n6 T z' z/ Q* m' o+ G
% c; @: I- D4 n4 ^' g4 [0 |, X+ {% V
MODULE_DESCRIPTION("Led platform driver");
" S! ]- a1 P; S( h6 |, O' Z( k. \MODULE_AUTHOR("Tronlong");7 X- G0 m: Y y S
MODULE_LICENSE("GPL");
' ]# d+ M. Z. c& t
* H0 t# R0 G" d i! x |
|