|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 Q; B% d# N1 u1 x* U9 S#include <linux/init.h>1 {" F* M5 ^6 p2 [
#include <linux/module.h>
4 n) R. @! `3 K- U0 V0 b: d#include <linux/kernel.h>
* n; d' p$ d" O; m3 G- Y#include <linux/types.h>
4 d* m% l5 f" \#include <linux/gpio.h>
" g- i$ }( \: x' ~: @6 Z5 C1 p#include <linux/leds.h>, r) T: n4 T6 C
#include <linux/platform_device.h>
2 V0 `7 E7 ^1 J& A8 I( E" x/ _; d# f* b* L" `
#include <asm/mach-types.h>
0 Q2 m* V# Z' G5 b0 z#include <asm/mach/arch.h>" Q- X1 i, n, f) J5 u' | q" F
#include <mach/da8xx.h>3 |: h: B; u1 f5 `5 k4 m
#include <mach/mux.h>
- P+ V0 h- Y1 u* `" P9 i D: R+ `7 Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* i1 G) o+ n! z% `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 l4 f: }2 }! G# k% _: ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 }1 F1 L4 P/ ^ N- l' R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 f6 m- d' D9 I- M
+ S4 B/ X P4 g* t7 A/* assign the tl som board LED-GPIOs*/
T( P( @0 r; ?9 i3 ~1 Ustatic const short da850_evm_tl_user_led_pins[] = {: @( g0 J5 U3 ~( F- E N3 ~8 j# z5 y
/* These pins are definition at <mach/mux.h> file */
; L; R4 v9 o, W P/ N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; t4 k7 @* I5 c6 s! w3 Y
-10 a8 h: E2 n- D' g+ u( x
};4 D8 f# p9 D2 @0 j: {. F5 v
& F! W" {% M: u6 T% r( {6 Ustatic struct gpio_led da850_evm_tl_leds[] = {
! C5 {0 B* _+ O) F/ n+ o1 X {
; Q- P6 W( |6 o( }" V+ [ .active_low = 0,
' G3 E" w. M G% U4 a0 A .gpio = DA850_USER_LED0,% h1 s R2 }6 y' @
.name = "user_led0",4 _0 r# G5 Z6 m+ c W. B) T
.default_trigger = "default-on",
( H( U, R7 L! w: S1 u },
& X0 C! }, w4 o/ S q {* w! c- i- ^8 \7 [ ^1 R4 B/ \
.active_low = 0,
) W2 s/ q* v5 u .gpio = DA850_USER_LED1,& B J$ t0 e% b9 n8 {: I* Q! A
.name = "user_led1",
* e: K; j% Y4 G3 w .default_trigger = "default-on",9 _' T' W- \1 a$ _# ~
},$ J- B6 Z2 P- j6 y" G
{2 V5 B' I2 n7 _4 f1 { ^7 ~7 U
.active_low = 0,
1 F& T$ t* K1 l9 y# x& O) h( H .gpio = DA850_USER_LED2,
`& D# F+ c7 x* A4 R3 P .name = "user_led2",9 u7 t) `8 v- x* C
.default_trigger = "default-on",
* w2 }0 D! T+ s! E( Q; G r. n5 S B; _7 p },
A$ t, o8 q: |8 _( K3 C7 H1 p1 K0 u {1 s, q7 i( J3 e2 r8 @
.active_low = 0,: j2 k5 F, X" h. p! S+ B& F
.gpio = DA850_USER_LED3,1 g; I9 _9 A' g1 b& J/ T7 o
.name = "user_led3",
4 i% u6 }) X: u# _! o) F0 u .default_trigger = "default-on",
6 V# m. ~. s6 K7 \( N& e },
: ?, q7 q v2 X! e3 o7 B% A};$ b& h$ h# _7 H
/ Y7 z6 c% |3 D, h% Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! q7 ^! p5 ^* ?& W2 k; t
.leds = da850_evm_tl_leds,
& u9 ~8 C' Y0 B" ~% d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; f# w* r( Z" J8 N% x" B};& S# v- U u6 ?5 L3 e
6 n6 A. A3 H" G/ Z; J4 estatic void led_dev_release(struct device *dev)
! A- k* u2 c/ s2 u5 ^" ?5 p{ Q2 t, H" G) {. e3 a1 m) [# h) E
};
0 c3 W( X+ H! L' u' }8 c2 q" X. _. C2 }" i' Y4 R+ {
static struct platform_device da850_evm_tl_leds_device = {
+ T' n* C% x0 O ^( T& {/ n .name = "leds-gpio",1 S+ ]5 p# H2 T; F0 {8 ^+ E
.id = 1,, ]3 W" w' |( y) P
.dev = {
/ K* X3 h* K4 H! B3 O% x) _: v- J9 u .platform_data = &da850_evm_tl_leds_pdata,
$ F0 B) u/ [ ]' ] .release = led_dev_release,
, d* A4 T9 }- K# n& }1 r4 | }% ?" f" v: X+ D# b5 @6 H
};5 c* ?) ~, C' r H- U% i0 u; N
! f4 E/ a0 w* v5 g0 D4 ^6 q8 ]static int __init led_platform_init(void)3 G. z' e7 ^$ o8 j" v
{+ A4 M% O4 ~; e Y t6 G% J: C
int ret;
1 p+ W& _& t6 g) B; l1 H#if 09 I3 G) U: V0 I" I6 ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 \. Q* W; V5 `3 y: w. r if (ret)) p- L, y- M# a% B' Y: Q b1 v s4 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ |! j# n u1 q/ m T/ b* _" @% v "%d\n", ret);
" I* {! E: b0 `* p' T+ x g- q#endif
G2 C0 C- y# ^- K/ r ret = platform_device_register(&da850_evm_tl_leds_device);: t8 k, E& M' @; F& B
if (ret)
9 m N& N& I5 j. ^, v2 i: F9 W( }) V pr_warning("Could not register som GPIO expander LEDS");
" g: ?6 I' e* ~( o else
9 p( e) L; c1 f" t printk(KERN_INFO "LED register sucessful!\n");
- f3 a; l8 H2 k0 `6 F( l. i/ N/ e5 v) Z# T0 H" H
return ret;
4 z' b( g; w( |4 E% Z}
: z- B! U0 h/ ]- P9 B# U% W& U/ c% _9 l0 M u9 x
static void __exit led_platform_exit(void)
( d/ J' V0 a% |- c{
5 W1 X% G# ?' ?) I" Q% G# R; R platform_device_unregister(&da850_evm_tl_leds_device);) |0 D# [3 `+ F; S( t, P
i2 K% Z4 v% C; { W$ Z" j6 ^ printk(KERN_INFO "LED unregister!\n");! j P6 u- V" F3 k
}; @0 s5 e+ h- w* V8 t
/ H) W- W) P4 L1 @1 q+ J! V4 r6 Rmodule_init(led_platform_init);
& _) X- W$ K" `* l, gmodule_exit(led_platform_exit);
" c& F: ]- ~& R1 d5 D; D
+ ]& \# ~5 F. b! eMODULE_DESCRIPTION("Led platform driver");
# _* U; d$ K8 l5 J3 ?MODULE_AUTHOR("Tronlong");$ g1 m+ B+ l/ H( w1 I/ N3 r9 m
MODULE_LICENSE("GPL");
; f: Q# r- n# v* _$ t4 }* B# E; h9 V/ p
|
|