|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 [8 t% [2 j) l0 I/ h* s#include <linux/init.h>% v! r- j$ t) ^: C; \4 h% T
#include <linux/module.h>
H$ t! Q9 l5 e' B$ o$ ^0 y* R#include <linux/kernel.h>% Q6 M1 \) |3 j! |2 v
#include <linux/types.h>
6 r3 z; ^) S$ L; B! I- L#include <linux/gpio.h>
5 `% V6 a/ i7 Z3 |9 I#include <linux/leds.h>
, z; a7 I+ j! h- G0 l2 H#include <linux/platform_device.h>
, r2 R" }8 x: H d" G
- O6 Z1 w H5 X#include <asm/mach-types.h>
5 n' o/ Q. M# ~' g+ ~#include <asm/mach/arch.h>
# S( ^: ?$ y9 x( D' C#include <mach/da8xx.h>
2 P" r" v, e1 T0 m. Q9 h4 V#include <mach/mux.h>
v9 ?& Z: u; P8 w: d# g
. f5 [0 ?. e, v3 c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ k" e( M6 y2 F& W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ r, Q! }$ D. I0 @8 B6 s! s' c: Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 `" z; [9 Q* `( c9 v. @0 {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 W* F) i8 Q& K) t9 R+ T" h) \+ H8 t! Y; L% a q( b5 R
/* assign the tl som board LED-GPIOs*/5 G6 p; W+ O$ l% _8 J) G& Y% }
static const short da850_evm_tl_user_led_pins[] = {
$ ~, t9 v" b5 t) h' a, C+ G /* These pins are definition at <mach/mux.h> file */- i9 q, ~& K7 F% V# n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( G. X+ m8 o: B% i, r; F
-1
8 I- t' z; o, c" E* H: I2 Z4 r- {};; E# d" A5 o5 c \
% A# I5 [. z$ R5 R; n+ d& t
static struct gpio_led da850_evm_tl_leds[] = {
. c; N% R0 c- |3 ]2 ` H4 w; @ {
+ L0 R2 `& a6 ?0 l) \- e5 W, a .active_low = 0,
5 R% Y1 r4 r$ Y! g8 A .gpio = DA850_USER_LED0,
* I" E# t! x" P) f .name = "user_led0",
- a$ @9 S' d! g3 R5 _' `8 } .default_trigger = "default-on",1 J, o! F. |$ t/ Y7 K3 s
},
% e4 e5 J9 E/ _. \9 o, g7 { {7 i' j9 P" V5 n
.active_low = 0,+ h6 x/ J4 T! S. e& E$ `9 i9 m
.gpio = DA850_USER_LED1,
8 q( T. b( V f8 R) H$ Q .name = "user_led1",
* |( ^) C5 C$ N4 k$ A- B& I* l .default_trigger = "default-on",0 q, B3 T7 c0 `- f6 h& o' j
},
4 r/ U0 T3 e3 i* ~! u# F7 c# u5 O {- ]7 P1 B. G+ ^; N
.active_low = 0,! Z* e: U2 C9 s: s. Z9 D4 l
.gpio = DA850_USER_LED2,$ z# F4 n# B+ k0 ?
.name = "user_led2",
4 H, D# A2 E- @2 `$ Z8 S& t .default_trigger = "default-on",8 @1 G6 C- J& b2 j# Q
},- q# O- ]% |/ \; S$ K
{
1 b I- v; ~9 k1 V# k# M5 J$ U .active_low = 0,
4 X& _% r4 u6 G .gpio = DA850_USER_LED3,
% m4 x$ Z: ~. o- A/ R, \! @ .name = "user_led3",; a) p% |, J. R) h: w: r
.default_trigger = "default-on",
9 P1 j+ A; Q/ q+ L) X# ]; M' { },
; n5 Y- a Z9 N& E' ?+ G- g};
( p. L: | g# w3 C% t4 m; J- |7 t
8 v0 w: o9 P. _$ H! t+ tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: E5 O! \: D3 I$ `2 A" t+ o8 L .leds = da850_evm_tl_leds,
8 d9 Z, E) f4 K5 l9 g+ ~! X! ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds), C8 Y* r- M( h" ] j
};, o ~. [5 Q1 a- v$ u o
4 u. G! R. m D4 V3 K: H; s% Istatic void led_dev_release(struct device *dev)" c! c! j7 e. I4 S: [) }
{) b5 d% b4 m7 [2 U
};- H3 ~ {1 S; g6 z$ J
# y3 t7 O3 ?+ r3 ?$ zstatic struct platform_device da850_evm_tl_leds_device = {) c3 Z# D; k$ I2 {* N) E8 w6 U4 P
.name = "leds-gpio",( C7 C8 z( ], S. K
.id = 1,
2 Z9 M/ ]6 o+ T% B8 z9 I .dev = {5 i6 h6 t! V3 a0 K
.platform_data = &da850_evm_tl_leds_pdata,# U: @- a7 B4 j7 a0 l: B
.release = led_dev_release,
* p7 @; G6 w9 }* E* H2 S2 \ }/ C3 l& q* V. `& E/ P7 H5 P
};1 ~: F8 z" A" O1 H' ]6 ^
5 D+ X) D d" @+ B( s+ w; {5 k$ Mstatic int __init led_platform_init(void)% y5 h ]9 M0 e- e4 m+ v
{
. F# t: N# g1 D int ret;" p$ X7 I+ S4 R
#if 0
. w! N0 B8 ~# ?# l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 \1 |3 { Q; T# y2 P
if (ret)# @5 d9 [9 h5 b$ A3 N, ?9 m$ w/ U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 P, x. }9 R- a- K "%d\n", ret);: y2 c# p3 T' V; L. V( u
#endif7 r) w5 M4 l. r/ b \ H
ret = platform_device_register(&da850_evm_tl_leds_device);
6 g6 e5 Z% c! M2 }8 K( G! X/ C5 P if (ret)
; q8 L0 V8 V: D& G pr_warning("Could not register som GPIO expander LEDS");
6 [& j3 H, c# D% z( F+ N" p+ y else
% c& q# Y x# U6 e9 \5 P printk(KERN_INFO "LED register sucessful!\n");
, g2 m7 n' I. f# ^% x0 q3 a5 J1 s
; r$ I3 ^6 v; T+ ^$ ~+ k: \ return ret;
( J/ \3 O5 {9 {8 h) A8 r+ k9 C M}
; C4 M7 X; I; [$ x" X. c2 o% ^$ |1 w- ^! F8 j
static void __exit led_platform_exit(void)1 R9 v6 }7 Q* ]+ }' g
{: m3 _& d/ Z1 |, Z- [
platform_device_unregister(&da850_evm_tl_leds_device);7 z0 q# T, }% t R' t! w
0 J0 [+ j( {& ~8 Z* k1 \
printk(KERN_INFO "LED unregister!\n");! V2 I! P' G5 |( |
}
; H6 B' T: T- R# w# r0 C2 E: q+ ^, v- T$ y- z
module_init(led_platform_init);( D. X4 ?+ U9 r+ U# @
module_exit(led_platform_exit);
$ I' o) \3 \' N8 d6 u
: L5 v' P$ i$ e% ^- h Z! UMODULE_DESCRIPTION("Led platform driver");
$ {* ?" D R# N/ u4 e/ eMODULE_AUTHOR("Tronlong");' E! j0 j( e+ M8 ~- k
MODULE_LICENSE("GPL");- l! ^$ f; f- x( D' j
8 `$ T/ j* O9 Y- g; E
|
|