|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. k# K; {# s2 K$ w3 p" V$ e7 ~' E#include <linux/init.h>/ u* p1 Z: B. B2 W; T
#include <linux/module.h>
$ h. f V" W* d9 k6 `% g#include <linux/kernel.h>
; A9 ?) e1 n4 H8 o#include <linux/types.h>
( C0 u# x9 F, ^/ v: T/ q#include <linux/gpio.h>4 q8 `# E1 A" Z# V: v5 T
#include <linux/leds.h>
8 ~% s& q: Q* o$ H6 [#include <linux/platform_device.h>
1 I/ m. R! b3 r/ @1 a
" O& a, g% v0 @$ I3 N, g" d [; h#include <asm/mach-types.h>. d% [' I$ n9 _# k5 V7 @. K( B
#include <asm/mach/arch.h>
% ^% k, b- P8 T" I5 p @9 r#include <mach/da8xx.h># n' r$ d! H/ M
#include <mach/mux.h>
9 \9 q. C$ s$ v" P( i( v( F3 s2 `. ]+ \2 f5 ~1 M' N. x# n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- U4 b ?. ]1 ^" Q# w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% M4 u$ P, _- a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: w5 q4 g# [+ W; @) b6 }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* `3 E7 ]9 w! O* V E5 x; X- d- J* g; K4 F2 I8 K/ d& O; E
/* assign the tl som board LED-GPIOs*/9 q Z; ]$ d1 v
static const short da850_evm_tl_user_led_pins[] = {
+ L1 J& E4 f/ u; o$ h /* These pins are definition at <mach/mux.h> file */& O# `6 H( j+ E0 O2 E, o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 D$ L Z7 ]0 |1 ~# [6 o
-1
9 I: g8 p8 x6 D7 j, J3 ?& s};
; c' m5 f: M# _# z# i& p4 F, Y" o7 ^0 F0 u) h. ^: @$ [
static struct gpio_led da850_evm_tl_leds[] = {2 \1 q. n* @7 q8 G! A9 q8 b8 X
{0 J" d4 E/ {4 [' j
.active_low = 0,! F, d) S* Q0 T' F
.gpio = DA850_USER_LED0,
3 D% z9 p- O. | .name = "user_led0",
* S% h/ [/ X6 z( d7 z M2 O2 U9 S .default_trigger = "default-on",! D1 y$ u2 W. @$ l4 l8 d
},
& `7 {0 ^8 g0 ?& ]" r6 G {% f2 O5 a; m- e: f
.active_low = 0,9 U5 t0 @ D/ O( M
.gpio = DA850_USER_LED1,
5 q! F0 l" V1 ]9 ?+ c/ `& p# E .name = "user_led1",
. W1 t2 Y2 Q0 Q3 k6 H .default_trigger = "default-on",0 A y5 D+ y7 d' l$ I7 }
},
( T* A2 B& A- ?' ^; [+ F {
+ M; f( l @& b* y2 J .active_low = 0,
0 K0 d& a2 O! V" X .gpio = DA850_USER_LED2,
8 f5 T" U8 C2 \ `' a .name = "user_led2",
/ F7 Y! [2 D) ` C4 m3 ?1 ]) g .default_trigger = "default-on",
/ [- ]+ b+ L: H" a7 ^ s& S },
( O/ [$ Q) Q9 {7 v* v {
1 Q" l$ z. l( W- J( i .active_low = 0,
+ K9 x, R. R+ S- a4 u& P# w .gpio = DA850_USER_LED3,
3 V+ Z% w/ }. H' m& i .name = "user_led3",
' U, W. h4 B4 Z; e/ n5 M .default_trigger = "default-on",9 L$ o- ?4 N6 o$ p/ g }6 c. {
},' ~& F2 T, {% R
};
9 n6 Q! q5 \% C( g/ r5 Z1 }. j" G2 e+ I8 [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; p) O/ a' I6 \" c5 K$ m+ ~
.leds = da850_evm_tl_leds," T9 |) Z8 D8 _2 ~- P( \# Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% B$ q* f4 E! J0 x8 d; E' c};" V3 n1 o( W8 D& v$ Y
5 j7 \; u; W# ]4 O) h7 c2 p- C7 mstatic void led_dev_release(struct device *dev) z: i( F- U( W* ]& f/ w
{# ~8 N" f. k9 m, g% [& j0 }
};$ G9 @) E. [7 P6 S$ j6 H0 c0 Z2 {# Q
$ u( i6 X' }( istatic struct platform_device da850_evm_tl_leds_device = {2 e. F6 X. Y6 n* t5 q
.name = "leds-gpio",: {6 [, S: b( q( J
.id = 1,
) n- M- a+ ?7 B9 e) c6 i .dev = {+ p2 M4 l9 ]' g/ N5 _9 a0 w% a2 Q2 T
.platform_data = &da850_evm_tl_leds_pdata,
$ f2 x; g4 {; D .release = led_dev_release,! a5 _9 u9 ~5 p8 }. ^, V5 u
}
/ E/ {4 F4 X! |};0 [7 t1 D& ~4 U: m
0 f M/ ~8 p5 Q7 Q* ostatic int __init led_platform_init(void)1 O- Y @' B! n; E! c7 }( P, D
{
, O& |0 L" J/ E int ret;* D4 A/ A* J$ U/ E3 L$ z' |
#if 0) d3 L4 b( |: S' R# W% N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# F1 E* ]6 T* Z7 U) g if (ret)
/ a7 F+ I1 K/ I" Y9 v7 S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( i4 N( y. f! p: o
"%d\n", ret);
5 t! c' {' W- H5 u" h- Z3 W) H$ W8 ?#endif
7 J* S! n" a' u! F ret = platform_device_register(&da850_evm_tl_leds_device);+ U/ D# H& c# w" Q
if (ret)" p2 _' f: d4 K/ r1 ^$ G
pr_warning("Could not register som GPIO expander LEDS");
* Y& @ ~& D6 d7 J7 m else$ U6 l4 D7 s# ]! p0 u. G6 J
printk(KERN_INFO "LED register sucessful!\n");
2 V3 Q& h: l S
. x0 t7 o& X; N0 n v return ret;; M+ j/ ~2 X2 x6 h& q ^# S5 o- |
}
7 w: d+ P9 K7 b# [8 O0 u" Y
+ |; t7 D- s9 u: i. C, _- u( l; sstatic void __exit led_platform_exit(void)
% Y0 z! q# D' o9 N/ D. u. v{! `! r4 ?3 {+ d0 H U: P( k
platform_device_unregister(&da850_evm_tl_leds_device);
$ j' C J% K7 M' ~ e A
8 v5 a+ ?: z2 }& k+ D printk(KERN_INFO "LED unregister!\n");
! k5 L4 p6 N+ a1 M$ [1 m}
' M& P6 y4 _( v5 B/ d+ W) Z- l' H: j) b+ o- P" @
module_init(led_platform_init);
?$ u6 X6 |7 R0 z; J* f/ ^module_exit(led_platform_exit);
6 R/ A" q; V8 c, ]; _/ p3 W9 W( I
MODULE_DESCRIPTION("Led platform driver");: ~/ j; v6 F5 l' W( y' T
MODULE_AUTHOR("Tronlong");
2 U" r2 F( `, `MODULE_LICENSE("GPL");
% O2 Z, S" G! v O4 } M. I( n* f) G" p
|
|