|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' G, _" z% r, L9 l#include <linux/init.h>; ] k3 i& i8 z' U7 k3 _; ^( r5 B
#include <linux/module.h>
8 d4 o9 x* T; A8 _$ {0 W#include <linux/kernel.h>5 E6 e6 Y9 S. p
#include <linux/types.h>5 O% ?( E6 M3 Z1 A
#include <linux/gpio.h>7 j8 `& M% {' X
#include <linux/leds.h>% p5 u( r( y5 [2 C1 x4 k
#include <linux/platform_device.h>9 g9 x0 a2 J+ [
& U' L! C/ I8 [$ \% z! N& Y( A
#include <asm/mach-types.h># W6 B d ?! s0 p4 a, P+ r' x
#include <asm/mach/arch.h>7 G \$ ?, x! I5 n, E
#include <mach/da8xx.h>
; ?/ _( h9 J, M* ?) @) k8 o9 v#include <mach/mux.h># X: }" c' ^1 i. l
6 ?. q0 y+ I2 H" Q& m. T# ~. x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' E- w* p- s7 @: _$ E# n K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 O3 {5 k Q2 `$ p! H5 ^2 ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 v9 |5 a2 P" J! O3 W+ l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& S. F( B& f8 }1 A
, {' z) v7 g+ |% @/* assign the tl som board LED-GPIOs*/# d/ i' X2 h1 R) P. k5 `
static const short da850_evm_tl_user_led_pins[] = {1 @3 J! J" N. m7 `: v# E
/* These pins are definition at <mach/mux.h> file */
' x% {. D3 {' B2 q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, P- g* w5 S6 h. `6 m. r -1
! T( |. B& N7 j# K; W};$ h' u# n& N/ E3 |
: E2 Y/ D/ X3 r( U% B3 f; b: m( Mstatic struct gpio_led da850_evm_tl_leds[] = {
5 r+ _( O9 y+ r! }* r+ y {9 u7 v/ f' L) o" s+ |9 p3 [
.active_low = 0,* q/ h! H1 F$ _4 a0 B/ l
.gpio = DA850_USER_LED0,
& m0 E; S0 W; T+ f; r8 o! ] `; a( s .name = "user_led0",
7 D7 \& A2 X0 ], [1 F" b' O .default_trigger = "default-on",
! @! i# z% g; W/ y3 g' O2 d/ [ },
5 b0 j8 i% \/ D {2 }+ `3 i( d8 o t
.active_low = 0,; `# U# _9 F# y" a3 V, h
.gpio = DA850_USER_LED1,% u; L1 d( g/ J
.name = "user_led1",: L# k5 g* l m- [
.default_trigger = "default-on",
7 |, w3 @6 T8 q. n: n- q },
, c3 i1 \ i6 P1 C; ^ {9 Y' N% s; ]$ q- X
.active_low = 0,
! ?4 \5 P3 f5 \* B) n# m- Y0 ^; R .gpio = DA850_USER_LED2,, K; F! B8 Y2 e% o+ }
.name = "user_led2",; p2 a1 Y6 I2 K1 s8 x$ F$ Z$ l
.default_trigger = "default-on",# e0 F5 R# ?* E2 Z% B! a6 r I) ^
}, g9 t w- N7 m$ h8 A3 {, m! d+ w( Q, n
{6 j1 K7 Z4 l# j- A% A
.active_low = 0,
1 i6 C% O. E* e& O) v/ R5 C% p .gpio = DA850_USER_LED3,) J7 I! ^$ {' G( L0 ^5 o. B1 h
.name = "user_led3"," k9 |/ A J4 H5 ]3 m
.default_trigger = "default-on",
. I& [7 V% v( K },
6 R0 r; X/ N& D};4 L+ ], W; G- }0 @- J9 t9 \/ @
6 v0 d7 c3 j3 `$ n. |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: ~8 a4 t8 S: t {4 d) w .leds = da850_evm_tl_leds,
' d7 P! }0 J$ h) u, W# o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, }8 | q; f$ M/ ?};) u/ z( ~7 K3 Y: A
4 i+ g0 J- r$ G+ E
static void led_dev_release(struct device *dev)
" }2 o) F& S" O T{- u" I2 n9 {" G9 c
};
- e1 i2 J7 r8 M$ v! W" p- q: C( N* K# j& Y( ?$ v
static struct platform_device da850_evm_tl_leds_device = {
7 A! @7 l, \5 J4 T" D* t .name = "leds-gpio", q2 p0 w- Q, i8 r* j. ^
.id = 1,
% Q7 x# M5 e, I+ w .dev = {7 G" X; k6 G: j$ e# i, A/ W+ R
.platform_data = &da850_evm_tl_leds_pdata," B! C! y) S }. a
.release = led_dev_release,
1 C0 F: H+ b) w/ }' y" y }
, r1 J6 X) _. D7 j4 N# F};
- Q4 t5 M7 ]- V" j( D8 a* v; C1 [ ~' U
static int __init led_platform_init(void)
! Z5 l; h4 _% V0 L6 ^{
Y$ N- L! r4 I/ G. r# C4 `1 P int ret;
I, I; u" i; V) G/ s- F1 L) ]#if 0
% w( p) f+ [6 }- b4 w& E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 {; `6 e' L& Q! b% [: z
if (ret)! Q% i1 G- F( {; F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 ^& c$ e9 o2 w' L) X "%d\n", ret);; u) Z. ?6 g: f$ d
#endif6 Y. |3 @7 c2 L5 G* _
ret = platform_device_register(&da850_evm_tl_leds_device);# ?% \, Q* ^5 d; E/ m
if (ret). n( ]: I j5 E1 x0 H9 i' L& _
pr_warning("Could not register som GPIO expander LEDS");
0 M) Q+ W5 @2 q4 |7 v. G! U; b else' f* c3 t/ Q9 _2 {4 J3 ^
printk(KERN_INFO "LED register sucessful!\n");# O6 ~2 i; @2 X2 ~
) A- D' Q7 P: {$ d) g4 d
return ret;7 ~9 F! ]" S2 L, G- E& p1 }
}; ]1 z, ?3 M( |- f7 N* @. W8 I$ c
1 u: i/ {2 ?$ L) \static void __exit led_platform_exit(void)+ ]$ y4 o7 Y U$ J) `8 |! t
{, r4 H6 r- n8 C9 C! M
platform_device_unregister(&da850_evm_tl_leds_device);
6 p' ]+ K, c' W# @2 g3 y# `# v# G4 o8 U5 F' u1 R: D. \
printk(KERN_INFO "LED unregister!\n");4 y n" y4 R; S. j9 k1 U6 O3 U w# Z
}
, K5 V# o2 d, a4 H
# h$ f! {) a! F8 b/ j5 |module_init(led_platform_init);9 C7 r) U- G% }% s0 Q& J
module_exit(led_platform_exit);
+ x* M, D. p7 y- h* D v# Q4 E+ c; r# I
MODULE_DESCRIPTION("Led platform driver");
% \2 y! T0 m8 ]" ~MODULE_AUTHOR("Tronlong");. Q) \7 \: |; q+ G
MODULE_LICENSE("GPL");) L: e% h9 [6 w
/ E9 U& T' G0 J; ~7 S |
|