|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, D9 D" ~0 q3 q7 a$ Q- C
#include <linux/init.h>
& t9 A9 L& G4 J' F( p3 N#include <linux/module.h>( U+ X: S' s; O! B
#include <linux/kernel.h>% f T! @' j& Z2 ^2 U
#include <linux/types.h>/ @, ]) V9 `! H7 C! \
#include <linux/gpio.h>
; v0 y, v3 W4 Y4 M: d, D#include <linux/leds.h>% y9 _, a" U& `1 c5 f2 K3 V
#include <linux/platform_device.h>& h4 | }$ o7 [( Y _6 @
& J! M! X- l1 K+ O' m& X
#include <asm/mach-types.h>
+ v# l! m x9 s/ v3 J7 J#include <asm/mach/arch.h>0 |7 e E* [+ V8 D; G6 r4 s8 u
#include <mach/da8xx.h>
' S' A' U [7 ^1 [0 K#include <mach/mux.h>6 E" O6 r8 P, @2 b s! _) J/ O
" G& R1 P: ]8 v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& n. O& Y/ t7 k* q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 F4 }6 n+ V( W% Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ Y4 g( |# g/ T6 A3 C) p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 k( Y9 Z! x2 ?2 H+ h8 b1 j$ I+ L& K8 J1 o* ^
/* assign the tl som board LED-GPIOs*/4 `# Q. T& v6 n
static const short da850_evm_tl_user_led_pins[] = {
$ ?4 |! E {+ H: f' w8 a /* These pins are definition at <mach/mux.h> file */
- n8 Q- ^5 U# c+ [ ?+ O9 e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: g1 z2 @9 M& b% K" `9 _7 ~3 g
-15 |' x3 I9 x/ i+ d: ] Q! q7 ]
};
# q2 V5 b. v7 D% W* F5 P3 S: W9 r1 i/ v/ o' K; H |: I
static struct gpio_led da850_evm_tl_leds[] = {5 v- O( L. |4 R+ h) a
{
+ X1 m( Y% f% v; m' I; T .active_low = 0,8 ^5 |8 g' c( H7 r$ R& h4 e3 g
.gpio = DA850_USER_LED0,
5 Q3 F# a6 T6 l7 s# m" ? .name = "user_led0",$ u% S2 Z `: y1 E8 e9 _9 q3 m) o7 i
.default_trigger = "default-on",
* ^- t. \ L! Z$ R& A },, f& A7 a: I& I% k! o& f
{
" _' w1 b& w( {8 v9 x$ Z/ Y5 i .active_low = 0,
8 }. Z( _$ b0 U, `* G6 m, U E* O .gpio = DA850_USER_LED1,7 S' G `9 {/ r1 h- H! o. [ t
.name = "user_led1",
) I0 v# z7 i7 p4 g .default_trigger = "default-on",
7 _3 Z* K' T# w% {9 I( G1 ]9 n },
4 @+ @5 X+ P( c! e {
- b6 H+ W8 E" e. k+ N! Y: f( \ .active_low = 0,, l: |; N6 Y6 c7 f
.gpio = DA850_USER_LED2,+ {& m5 d& z2 ~; A9 l" r A
.name = "user_led2",
5 N0 U# j T. b; S7 F8 @5 Q .default_trigger = "default-on",( i3 F6 y# U% F
},
; ]3 L* T5 E* r+ w) y {
9 H. X4 O* ]6 \) ?# v/ u N0 c .active_low = 0,; w0 o' `* {7 ]# \7 v/ H
.gpio = DA850_USER_LED3,
+ \' ^- J' d# } .name = "user_led3",$ i: g% U% z: h8 T6 Z' M9 E
.default_trigger = "default-on",
. {. ?# b+ L8 i },8 h9 R1 \. y1 H- j( D
};+ g2 p/ c8 @5 e* t
/ M6 L. o" `8 j+ x, R( R1 t. Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ u+ J/ o4 ]& ^: D2 G5 p .leds = da850_evm_tl_leds,
' g# h* K2 H. l/ r; Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds), y" K1 I; q& u# Z& \
};* p+ `7 q# [4 r: }6 h- G7 c
: Q+ O8 K8 R7 V: D0 U' g
static void led_dev_release(struct device *dev)
" @ `. D! d% R @{7 R# L' W* g+ i6 u! p
};
6 K" O& [7 j2 x+ M2 b" C d, [" C# Q1 l9 M- W b
static struct platform_device da850_evm_tl_leds_device = {7 ]2 x3 N3 \" G' C. a
.name = "leds-gpio",! A7 z4 A3 `# C$ N4 x, i& s9 r% F/ @( [. i
.id = 1,- s, t3 x( C( F7 g/ m
.dev = {
/ n8 ~1 z$ L$ X4 G0 O8 \ .platform_data = &da850_evm_tl_leds_pdata,( l# a5 m( B* ?
.release = led_dev_release,
; H/ F! w5 K$ O2 L3 {" P }
4 z* J6 `! V) D) Z/ v) ^" c$ S, k# v6 L};6 i$ ]/ {1 @ ?8 |5 S
. l1 u8 b/ y/ o- W$ v
static int __init led_platform_init(void)" u( F& s# C' q! ]* _; B. ~2 ]
{+ ^$ N: }. l# u, O2 r8 p
int ret;
) V& x; |& b- L. w7 G8 I) u& S#if 0$ C- H5 J4 d' O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ ?1 t8 n: e( w! ~ if (ret)
) Z) j+ H t9 w3 U3 d- M/ l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 B. S+ c) [! ?: t$ C
"%d\n", ret);/ j% o6 U! D& r3 p6 P
#endif
* L6 w9 |1 ]% z) w( v0 W ret = platform_device_register(&da850_evm_tl_leds_device);6 f7 s5 M) {% A; \# H2 N
if (ret), o1 Q0 F }' c+ o8 C& M7 W, A9 ^1 U
pr_warning("Could not register som GPIO expander LEDS");! n, Y; I5 s/ {" [, b
else0 Z& b3 e4 f7 o' A" O- \/ b
printk(KERN_INFO "LED register sucessful!\n");
( X& q! z3 B2 Y/ M% R8 w( L6 q& R7 z+ t
return ret;
. ^) K; U% F8 b. B; L. N}: a9 k+ R6 R; ~- e# G
! K3 S% P4 A s0 E% ^
static void __exit led_platform_exit(void). U7 {8 @1 s% w0 J" X& ~
{
- L. N; d; B9 l platform_device_unregister(&da850_evm_tl_leds_device);+ _0 {9 S- y1 ^4 T h/ J' [
; y% u8 G) {5 v( F printk(KERN_INFO "LED unregister!\n");
, ?6 T1 d6 ]1 H- C0 c% {9 t3 m}
3 O5 Q1 U* S3 Q* y' |0 z9 j+ M$ G$ V, n5 D m U5 @, ^$ X4 O/ @
module_init(led_platform_init);
* _2 a8 \$ \& t0 Gmodule_exit(led_platform_exit);" h- E; e" l: k# J& \! C% j4 P
/ [' ~! c4 S9 @) n4 e) m6 C" U3 \MODULE_DESCRIPTION("Led platform driver");) j. i m% o& b
MODULE_AUTHOR("Tronlong");
; n( D" W/ j: {/ Z) HMODULE_LICENSE("GPL");
. b, @4 ^1 y, C2 g) t* s4 l- b" j) i
|
|