|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 N- D7 n! R: y% s+ f' h* O#include <linux/init.h>
& S3 y0 H3 b5 U3 F' S! a% {$ R#include <linux/module.h>
( I) l! N2 w k0 e& W#include <linux/kernel.h>
% n$ F: y/ Z4 x' u4 n! B1 {2 w* s#include <linux/types.h>; F& f: u' w3 k! c7 I
#include <linux/gpio.h>7 P' \" P2 u! N+ L, D3 P8 d* A
#include <linux/leds.h>
/ n# f( b4 _. v( }#include <linux/platform_device.h>8 ?5 r% m& U1 W4 O% P. y) x
! l- ~7 ]" q2 u# g3 Z- l#include <asm/mach-types.h>
X7 r/ M+ F0 z7 q, S#include <asm/mach/arch.h>
8 ]+ `* `9 u9 k3 l# L/ }" x* C#include <mach/da8xx.h>/ `0 {0 B( u, }6 w t$ g
#include <mach/mux.h>
) E2 k+ c% R7 L
2 |! ^# y: N g- P9 v0 P! U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" a. \8 }# ]) M: p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 E* ~% j+ N- R$ r" {: f/ f+ |& X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 x, y q/ E- P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- R/ `4 R$ _ \2 ]6 p M1 ~9 r5 b2 {- `6 Q
/* assign the tl som board LED-GPIOs*/) F! s/ w# q0 l" \2 @% L l* d8 Y
static const short da850_evm_tl_user_led_pins[] = {+ H e4 Y n7 t. ^1 r3 i
/* These pins are definition at <mach/mux.h> file */5 ~" ^3 k8 b' [! n: Z' \ \: `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( Z! ]$ r3 _/ L$ `4 d! t1 a( i
-1
+ m' Z2 r* T- j# x/ x7 t- C};; R( e& \- q T+ s* H
7 n T! K e) n6 x1 r6 Lstatic struct gpio_led da850_evm_tl_leds[] = {
6 L1 k$ a6 U( s1 A& }& h& x {
! p; h( q* [ F8 R$ b2 o .active_low = 0,! ?9 _8 `8 B# j
.gpio = DA850_USER_LED0,
2 g3 x3 S0 s! e: \8 i .name = "user_led0",' Z" o6 Q; I" M& o/ q
.default_trigger = "default-on",
- T. G/ O/ ~: o5 n },
# H5 H3 o9 j- K {
! i4 \1 Q7 ^3 K# ] Q .active_low = 0,3 B; l5 y/ q( W& ~, Z$ F
.gpio = DA850_USER_LED1,- @! v% S% p$ h, F
.name = "user_led1",
: L' E0 {) U4 k4 |6 T/ d& Q .default_trigger = "default-on",9 l- _- { c* P) w
},
9 k, c! P+ X4 a9 j% r& W v9 a4 C {, F# {/ K) p: } H6 h% `. _ p
.active_low = 0,7 \+ B; V/ O' ~# D2 @) O$ k$ c
.gpio = DA850_USER_LED2,
% s2 |" h/ T5 Q! i6 \! S/ f, Z .name = "user_led2",) ^% v" Q L4 A
.default_trigger = "default-on",3 C& x3 r% P3 d0 E4 J4 J4 P
},
+ v. d9 i9 B9 C. i& ~ {
6 A" { X# D: S% D9 b .active_low = 0,& S5 r& K: F( {' r: [
.gpio = DA850_USER_LED3,/ n2 s! e& v6 p( g1 x5 e/ W- a
.name = "user_led3",
: F* S1 t% t5 H5 d, l. K .default_trigger = "default-on",
, D& ^/ F4 A7 R },/ u }' M8 Z( o% ]5 P
}; D+ H( ?0 s0 a
a% e( t; L$ Q8 c; {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- d9 |4 T1 t( I# u/ |* {4 ]; u, _ .leds = da850_evm_tl_leds,( Q7 L: k" k; R! Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ P4 ^, X5 s" b, y
};
d! }! O0 o m' P$ b% Z$ O
; Z# A$ e& k: @( |) Istatic void led_dev_release(struct device *dev)
' }5 D: A) J( s$ |/ L% p! v{
_( \1 j" z, ?};
3 c' q! B( N k8 ^: R
' |. Y( b: s6 W# m; g+ D* [static struct platform_device da850_evm_tl_leds_device = {4 y' Q6 v) `& R# B* s3 d
.name = "leds-gpio",
# C# l3 \2 I& s .id = 1,
$ ^+ P* t; X% a/ R, s9 F .dev = {0 `# {2 V$ ^$ C- S+ ]. S
.platform_data = &da850_evm_tl_leds_pdata,
' N$ V/ E7 M2 N+ p( G .release = led_dev_release,5 b4 i' _1 U& H& I
}
, o+ t! J+ d% Q& H- N! W};
. W+ w& d1 d# |9 z, r# T1 H9 S, ~, A% q+ v3 w8 o3 b! u( i O
static int __init led_platform_init(void)+ _) |4 t# P0 n. n, f4 h& r
{5 n( c5 t& f8 b' R& p
int ret;
8 I% P8 s: t* U5 D; {9 U#if 0
6 ]- g* x5 ]* `& B0 a% N& O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 I) a$ |4 C7 c% D& q6 |. A$ c if (ret), ~& K1 H4 w6 S) J6 Y" O5 c4 P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! n t; U5 [8 f4 e* T1 U: } "%d\n", ret);3 {4 a9 x: ~9 f! y
#endif3 F6 `" j0 U% O( f; r, I X8 c
ret = platform_device_register(&da850_evm_tl_leds_device);
z& Z0 V1 h, o0 h4 K if (ret)
, ?7 H7 l1 f0 ~ l6 n( K W4 D pr_warning("Could not register som GPIO expander LEDS");
2 `+ s8 A1 B. S. F% D else
: m" F0 z1 u$ H5 O% M printk(KERN_INFO "LED register sucessful!\n");8 R! t, J) h1 y" s. d
2 ~1 [6 v, {$ H0 d% n, o( w9 T
return ret;
" G3 ~$ u }. D& ?# @}
, c* F- O. x/ i7 U( p% C$ H/ {0 T9 V3 }, p/ @( g* F
static void __exit led_platform_exit(void)% Q* k9 t3 V1 Q
{: ?# L8 q$ I# C
platform_device_unregister(&da850_evm_tl_leds_device);; X& j B5 }0 L7 o
$ N5 U& B) \3 {. g7 M printk(KERN_INFO "LED unregister!\n");
# W. n4 g" i8 d. S}
( n, R7 z4 _4 Y* T' h0 E3 Y4 I/ l& S/ e2 N* Z- T% N) T( i
module_init(led_platform_init);
: i2 l+ B$ j) J- m* K# ~1 Smodule_exit(led_platform_exit);
$ E. ^) W0 S) I% N
6 O1 o; A0 \- K3 X8 e2 i* LMODULE_DESCRIPTION("Led platform driver");3 L# s% o' z% y7 j! w
MODULE_AUTHOR("Tronlong");& V$ b F8 X7 C" c
MODULE_LICENSE("GPL");
0 {3 ~. _( c c, Y1 i
) z/ `* Z; E2 V& X" m! \/ M# j/ n |
|