|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, i$ W# \+ E+ k9 E+ \5 k4 b
#include <linux/init.h>
: p; d2 P( l9 l% D0 d% [#include <linux/module.h> t9 _7 e2 z7 U% E& e
#include <linux/kernel.h>
. C+ Q' z( m! A5 u: P#include <linux/types.h>! H$ d) ?$ r% r& M( J4 H- I4 t" F
#include <linux/gpio.h>
; b2 H% W: s9 c3 ]0 J4 _; T' h( e- W#include <linux/leds.h>
% F, [7 M; u; l6 u* T; i#include <linux/platform_device.h>, s5 [$ b4 F; B6 j/ x
" j( a7 j" f, Q/ h7 j
#include <asm/mach-types.h>4 o3 l( h9 Q, O! u! ~( E- L
#include <asm/mach/arch.h>
- p2 E4 O0 ?' C- y#include <mach/da8xx.h>
3 K' h6 W7 h9 n* p0 H \/ V#include <mach/mux.h>
# Q0 d) F- h$ a: v; n) s5 N1 V* C
3 }/ ^9 ~7 M( w) B' E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): K7 Q9 I& P6 Y1 V ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), i: i+ T! ?) B- ?# `. T# F$ C8 @' K% V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 K+ v, X8 D! r T* o$ L- ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 g5 [6 |0 @8 ~1 w2 v" n
5 z" H/ p( _+ X1 m/* assign the tl som board LED-GPIOs*/
* r; M0 j8 S2 m& C8 D3 R, ~8 sstatic const short da850_evm_tl_user_led_pins[] = {
* Z( z6 c `; T /* These pins are definition at <mach/mux.h> file */! |# E3 \" R8 f! I# P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ V! ?! I f, n
-1
! j7 T$ j7 q9 q+ f};
8 P0 {( r5 O' g A h n. o* ]0 }5 O
static struct gpio_led da850_evm_tl_leds[] = {
+ a1 Z! {+ P# u1 k( k! u' @- v {
/ b" Z* Y- a, E3 i; d; D .active_low = 0,/ }" u7 U, {$ y' b! S2 w6 }
.gpio = DA850_USER_LED0,
& o/ T3 e4 n$ L# |4 Q& M$ K .name = "user_led0",
5 @1 j* \3 x4 ], Z& [& E. ? .default_trigger = "default-on",/ B+ y5 Z8 A2 F( ?6 ?# @+ _/ q
},9 m7 ]( `( V& s7 q' V
{9 L, R( V; T. x; m) K$ }
.active_low = 0,5 k6 e$ P: D0 [6 }5 p
.gpio = DA850_USER_LED1,& b* L* L# {4 _+ B$ m9 d% v4 v9 ?& F% K
.name = "user_led1",
% @+ w( n1 M, i& J4 [$ X .default_trigger = "default-on",
6 w+ B+ n6 s2 c' m: \+ I3 ? },: W. T R. C$ o
{
4 D% d% A2 B& m, l0 _& d% ^ .active_low = 0,4 E( ~' p" r+ b1 k3 N% T
.gpio = DA850_USER_LED2,
$ c5 Q' H7 g4 X O .name = "user_led2",2 p5 X3 I7 l) a4 l
.default_trigger = "default-on",
$ m# `1 b; O ?, g8 D: c0 T9 J: d },; S2 E3 {; O6 t, l* y
{
0 ~9 s1 n" \5 g6 i .active_low = 0,# M1 d0 i5 O5 T5 E; L9 j+ {
.gpio = DA850_USER_LED3,7 K* }7 j' R: {. Z4 M
.name = "user_led3",
0 m. P2 I9 Q3 R% M# ^) e @ .default_trigger = "default-on",
2 _- Q# P2 y, i1 e' u },$ I7 ]( m- e2 ]* G8 f
};
6 D' j) a9 O0 x: F4 T: w7 R- p# X* x$ ] _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 S* q' K) o+ Y: G
.leds = da850_evm_tl_leds,
9 c7 o$ X! ~0 m1 g2 k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 F5 U8 u) |& C( m! O- D( `3 E};
' N( ~% V1 F6 l- ?! ?! q: X2 N9 G7 }% N& O; z
static void led_dev_release(struct device *dev)
& h" u, J& m2 {) U; B{2 L! u: T7 J! n7 }
};3 W/ B' Z5 J, Y6 l& {5 m5 n5 M
6 i( e V$ V! S4 X) h
static struct platform_device da850_evm_tl_leds_device = {- U. }& a2 O0 l. b
.name = "leds-gpio",! A; B4 W0 Q2 B- S2 y
.id = 1,2 e6 ~" Y. ^" A5 w
.dev = {
* b% n$ _" @- l- @3 W% E# [ .platform_data = &da850_evm_tl_leds_pdata,' N4 B0 x! g5 Q; [# W) ^" h
.release = led_dev_release,
/ b5 Z1 e) _( |; ^$ m+ M }
) X- { W' L) z7 ?0 u};$ J" o: R1 ]* y7 _4 V6 @" _+ d
/ n* z9 t5 ]/ d# n
static int __init led_platform_init(void)
6 X% o- v/ s+ q3 ]+ m0 O{
3 K {2 l" B% F1 q int ret;
* E- e V" G, J' J v+ d#if 0
" C( f$ `& I8 {8 U3 A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% R( d% o, t# ^4 _2 C6 Y7 L6 i
if (ret) }) K$ i0 N: a2 L6 d, `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 {5 O& l. S9 L! `2 x6 ?
"%d\n", ret);7 m/ L& p) l) g& r2 O% Y
#endif
& m7 F: [( S8 P1 ]5 g ret = platform_device_register(&da850_evm_tl_leds_device);
7 ]3 Z% o7 B, G- p- y if (ret)
1 Q# Y: w+ g9 I$ _0 b9 O V pr_warning("Could not register som GPIO expander LEDS");
/ d5 Z" }1 c5 B7 { else
8 t! p. {- e0 H. ?& G2 v, v& N printk(KERN_INFO "LED register sucessful!\n");
9 u w D, W, u# U# a
; x0 N! m# I4 ^/ C4 x5 X ^7 q& ~" k ] return ret;
+ R0 W7 k& m0 o}3 _- }7 f' i( k' u7 N
6 k/ n+ n$ M: m
static void __exit led_platform_exit(void)
( `( v' V6 I/ {0 h' W: J+ U! }! ~{
5 C* m- r9 r# s* K% [% L platform_device_unregister(&da850_evm_tl_leds_device);
7 a5 P( Y# A1 m& T
- b' v" X& r/ ?' r6 [# P' J$ q! z printk(KERN_INFO "LED unregister!\n");/ @1 `5 \: b/ o3 d" U1 J6 W
}
' n' E6 z/ `# H' w8 i) v- n1 _* j$ w' W! t$ O# p: d8 C1 K; a9 c) J: y
module_init(led_platform_init);
7 s1 _. |( p( a4 z9 J% U- P* }' o( Dmodule_exit(led_platform_exit);
# R9 j0 G @5 O
* T( v5 m, U# w/ r& PMODULE_DESCRIPTION("Led platform driver");
}6 n% `4 S5 q" G" C7 bMODULE_AUTHOR("Tronlong");
5 D; m% J: L( S3 u E+ N7 C# a1 |MODULE_LICENSE("GPL");" }5 L( o6 T8 }3 u5 M2 U, T
1 O. Q# z( L0 u
|
|