|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* t6 V" A* y) a4 N( Q; Z* |% t1 y
#include <linux/init.h>
4 {7 l; a; @) j2 L) @3 i3 ]. U0 W#include <linux/module.h>4 J: ?9 ?0 H3 m& A
#include <linux/kernel.h>
' N1 m6 c6 x# h; p. J#include <linux/types.h>3 y/ r6 f4 u! ~ ` Q$ J
#include <linux/gpio.h>
" I B" n! Z/ V#include <linux/leds.h>
# D5 C( \: T+ v# v- E#include <linux/platform_device.h>7 g5 ?1 a; }) O, [
) m4 V/ G+ ~- b3 ^4 k
#include <asm/mach-types.h>
- N0 r4 N5 g' y) v Z# p, L1 ^+ i#include <asm/mach/arch.h>
# }2 ^, R- {4 z8 P, R#include <mach/da8xx.h>
4 A4 ^& j$ l7 s9 w, a2 w#include <mach/mux.h>/ H" R: w+ s/ K! [+ l5 D- T) ]
* t# w& L7 U+ |9 O/ o' X' M/ w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% w- ~% N4 @' a8 N#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! v8 x+ k: {6 Y& c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 i7 I& x* f' z W( ]* L& @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 T6 k( P1 [/ r9 \
! ~) E8 _0 \& E s2 k/* assign the tl som board LED-GPIOs*/
: R. P3 H: |' m! I" a. G; g+ w, w' Lstatic const short da850_evm_tl_user_led_pins[] = {: i) U+ A. j# K7 p8 ]
/* These pins are definition at <mach/mux.h> file */& b+ Y2 X, i5 g! d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- y S) C$ S' B* |1 g
-1
* y' r* Y, Q2 Q @};) O& D3 E, P+ T% w# G! u/ q
* P( n) G8 L/ A/ A d
static struct gpio_led da850_evm_tl_leds[] = {
* @8 ^' G b& }; Q) e4 N1 | {
4 g- l& t# P- U: T( \% ` .active_low = 0,
4 h" D- E* P1 x! Q .gpio = DA850_USER_LED0,% X+ ~% Y4 B, r6 w/ l+ q( y
.name = "user_led0",
/ Y6 t& E; a# o0 h/ h. [ .default_trigger = "default-on",4 u, C7 J: n2 z E% B
},
g/ n; A( f, `/ } Q/ f {
/ @' x L0 j" K# q9 T* l# z ] .active_low = 0,2 o6 J- [9 g& f9 P
.gpio = DA850_USER_LED1,
) j/ ?9 e$ v9 w- I9 D% W .name = "user_led1",) T4 i# ~8 Y( @: [; i
.default_trigger = "default-on",
4 F0 K% j* U3 \9 q* i n/ n: y3 U },
! k$ @( R2 ]( `6 ` z7 I {
- A; `! u* Y# W' ]8 i .active_low = 0,3 B' V/ [* n+ A! O
.gpio = DA850_USER_LED2,
6 |9 V2 M- M# U+ M7 F .name = "user_led2",5 q& M5 w5 e: f# f4 L3 L! \; s2 e0 m
.default_trigger = "default-on",: l% c! t6 h% u2 m. ~3 Q; t8 @
},
- V4 X& G7 D) A/ A9 | {
4 T9 ^/ p$ I/ ^) r9 X5 h# J .active_low = 0,0 i4 H& B+ o, g( o, `0 y S
.gpio = DA850_USER_LED3,
# l4 Z8 J% m' `2 Z .name = "user_led3",; ?1 ]- F! b" T. R& g; Q
.default_trigger = "default-on",
: V8 V& L9 B1 j% A3 O6 { },
, B/ S- G! c+ Y9 H, L; n};
3 k# D( j/ v) \$ v
* R" q# X4 m5 I4 x! p( Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' ?9 o% E6 P* u# d4 w1 @
.leds = da850_evm_tl_leds,- I: B7 [) ?* W P$ b/ q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' D7 Z ]* ^+ E" h
};5 \7 C) h: G6 x5 ]. U" {
( h5 D0 n2 h+ r" f$ V3 N. @5 [9 `
static void led_dev_release(struct device *dev)- y0 d q9 X, a* {; R
{
7 w; \4 F# h% u9 F7 B. D};" ]1 R* H# Y- Y. c! |2 M7 N3 F, z
4 P9 Z9 c; _# h: C9 w
static struct platform_device da850_evm_tl_leds_device = {
1 H" p% ?5 S' g+ B .name = "leds-gpio",5 B/ \6 q, H7 [& a
.id = 1,
3 b- W! G; P1 v" W7 j3 V .dev = {2 P, q1 O t+ L5 q$ T" r' S
.platform_data = &da850_evm_tl_leds_pdata,
4 p2 b2 L: O! J3 I, q1 ] R .release = led_dev_release,
, j& ^3 X4 c" `0 g/ h6 x% D }) b8 t7 k8 K) l5 U
};' Z; U* q# Q, \# P
: ]" e3 h: \6 @$ F9 |static int __init led_platform_init(void)' j. H1 M) H& N, R6 |2 y
{; T, `' V) M! w# ~; L; W' S& U% s( a
int ret;& A% j/ ~+ V. g! B/ C% w# T
#if 0
9 C& p* }6 N) X. k8 M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: c8 m, g9 e; b9 c* Q$ y2 g6 Z if (ret)+ J5 e2 @, k7 V; {- K/ G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. v0 K" W L( B "%d\n", ret);
. \: U; [: U' c) G- P#endif! j$ ]$ G2 E. j# O$ M
ret = platform_device_register(&da850_evm_tl_leds_device);
+ F6 U0 F( E( @! K/ E if (ret)
6 W! F4 c9 i' B" |9 s; \# F" b pr_warning("Could not register som GPIO expander LEDS");1 P" x0 l! N0 C+ |2 c% F
else/ c9 R3 S( e! V f' P% l
printk(KERN_INFO "LED register sucessful!\n");7 }# {5 p" ^# D1 G3 G
, _5 a5 ~% ]) x) s) e2 Q return ret;
/ N2 c7 F" g! w; R6 b( H/ [}7 z* |8 A0 }6 x
9 m1 l4 ^; |( [+ Estatic void __exit led_platform_exit(void)2 e+ f/ m3 K9 C
{& q0 [# C& E" `1 Y
platform_device_unregister(&da850_evm_tl_leds_device);
% m4 {, _) b- ?3 B- a" B7 F
/ {$ u- J a# T! w1 ~& D6 I printk(KERN_INFO "LED unregister!\n");7 \5 q! H0 k7 ^7 i4 r' c' I
}: g3 r: C+ ~# G m( r' q
$ y' a4 x0 h8 l2 c0 [7 g
module_init(led_platform_init);
. N8 ~. E" o, K; H5 O0 ]9 Rmodule_exit(led_platform_exit);
( x( Q5 {+ ] m K; `: Y2 G6 J- ?- ] S# r7 X
MODULE_DESCRIPTION("Led platform driver");, A2 Z: X' O+ I7 C3 X+ h
MODULE_AUTHOR("Tronlong");3 r/ X( k5 C; ?3 `/ ]5 r# @
MODULE_LICENSE("GPL");
1 [; ]3 G) Q; R* e; \) V& @+ g! G7 |4 ^! _# }
|
|