|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# n" E* f% l7 ~+ e6 `, T
#include <linux/init.h>
; _& g' l9 u) N# l( \#include <linux/module.h>9 j: k: k8 G# |# h5 m
#include <linux/kernel.h>: r# T* I9 R/ K2 b6 r1 r! Y# \) t
#include <linux/types.h>
& {' a: t, ?# S6 q( v( v& W#include <linux/gpio.h>' L# X: x: R1 e( B
#include <linux/leds.h>
, g6 S' I8 Q" s+ u- a; E5 K8 u#include <linux/platform_device.h> v B0 O5 ^/ W# S1 t
0 P' C* q5 L. s# |2 e/ G#include <asm/mach-types.h>
% r) M8 @3 L- n$ e* s#include <asm/mach/arch.h>5 g3 a1 P6 [& y
#include <mach/da8xx.h>
" B+ v+ [8 S( J' w" V$ I1 _#include <mach/mux.h>- W9 Y5 B' c' o* G5 k
M5 q1 F% ]% L, T- z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) d/ b; t4 g0 d3 X9 F j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 C/ ]% V3 }+ E+ b6 C* `9 a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" c6 C4 G2 E, x. o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& C0 l9 R( ~ {# ~
3 v; I9 z7 c' Q* z. v$ J7 j0 N4 M( J/* assign the tl som board LED-GPIOs*/8 Z+ A9 s* O0 ?7 @: ?1 c) q
static const short da850_evm_tl_user_led_pins[] = {* S P1 }' H0 _ \& u
/* These pins are definition at <mach/mux.h> file */" b6 k- g- [$ x, L" O1 }4 Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- [: Y! ~2 E7 L4 X9 I, A
-15 [) x- t- V+ u4 h% s
};
# z" j4 j7 E& n5 }/ T* V5 Q3 h+ E" h7 A- C) g6 ], {
static struct gpio_led da850_evm_tl_leds[] = {: H3 R; m6 B& P# N
{
. h; P* t2 e9 L .active_low = 0," N; a/ u# j4 s7 J) R! l# }+ Z
.gpio = DA850_USER_LED0,- i$ m/ B9 Q/ Y( K& H8 u. `: [
.name = "user_led0",
6 W7 z6 M5 b4 f; V) u* {+ A .default_trigger = "default-on",# {1 K, |( ? Y9 n/ R
},* e1 E) A8 n- V5 f2 V5 w
{
8 ~/ N9 ~' V% {+ g .active_low = 0,6 v7 ^8 A' R3 `
.gpio = DA850_USER_LED1,7 V% l2 j. o( X
.name = "user_led1",6 Z9 F" Q& p* ?) {
.default_trigger = "default-on",6 h0 y: E' p3 U4 Q- }, ^
},- b% f; n2 K+ R; M, o
{; S+ z6 Y" N( F% y6 [3 Y: f4 H% i
.active_low = 0,6 k. L# T* G% g' N
.gpio = DA850_USER_LED2,
3 g9 F5 K9 D1 c2 ?3 q& X .name = "user_led2",
. M2 N- |) G0 E, V, o G .default_trigger = "default-on",8 [* N5 U. |4 u
},
% f% l2 \) E( ^ {% l( I5 [. v5 z* f4 q
.active_low = 0,
4 x+ {: G/ c9 `$ { .gpio = DA850_USER_LED3,* i- H( x( o! D6 U
.name = "user_led3",
0 T8 b# D3 U* j2 Y+ N( X .default_trigger = "default-on",
0 a: a7 I v: H },# \# L5 d6 W" o) P+ Q' l9 H% u
};
e' i! }2 m: T! }/ V- G# g6 M9 x8 p" B7 ^3 Z2 i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. X$ p8 `% h1 E" l$ p/ Z .leds = da850_evm_tl_leds," ~' t* m- u" M$ b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 V f2 C) S2 e& c: [};
4 U H6 W4 ?3 y" r6 M. ?8 L7 {$ g
# [( x) {+ ~. W% Wstatic void led_dev_release(struct device *dev)
- C+ u: p% X f- N+ B7 ~7 A{
) z. n; v7 \& u* I8 T2 t};3 v4 h/ [: W* _7 e7 E8 A& c
" S& ^. Y. f! H5 C, G( G9 X6 Z
static struct platform_device da850_evm_tl_leds_device = {7 G) {) ^" [: @$ e
.name = "leds-gpio",& t- [0 P5 W+ v
.id = 1,/ K% U% Z! G$ c+ A! X
.dev = {5 ^/ ~; d) i/ O4 ~
.platform_data = &da850_evm_tl_leds_pdata,! q. j9 r5 d' g+ S7 `
.release = led_dev_release,5 t- ^2 C2 y' S3 i2 ?8 s
}
# k1 W( T6 K9 m. |& J# V3 {. k# o};
- ^ k- F. O9 P6 f6 M5 l6 ]6 t! E' V. H$ G: z
static int __init led_platform_init(void)4 G! H% h- v h0 }3 J; \% G
{
: T9 G. p$ l( a' [ P int ret;
5 E# d2 ^; S; Z3 |$ U#if 0
% V4 L- d) Q" }- O' Z# t/ n% f ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; t2 Z. C9 Z2 ]9 F% b1 i if (ret)
' f9 i" v3 d3 t5 D2 T" T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# s- [" L% L3 B; a
"%d\n", ret);
( f0 g3 z6 g8 u#endif
% W6 z1 {) M9 a3 v8 {* z ret = platform_device_register(&da850_evm_tl_leds_device);
1 i( H' j+ M3 W( S7 t9 V& W if (ret)/ f- k2 p, D* i( g4 T6 w6 |
pr_warning("Could not register som GPIO expander LEDS");( R4 N6 ~2 W I/ m' S
else
Q0 }* C5 O& B2 N printk(KERN_INFO "LED register sucessful!\n");
; I' N( R& Q+ P# h3 H
8 K+ T; n0 t: O) \ return ret;
9 N: l0 {9 k: u8 m}
- t: {+ ?3 Y- {. d1 a8 A
* r9 h" `8 ~3 J5 i0 r/ ]" |( ^static void __exit led_platform_exit(void)5 `0 W4 N( c% f3 j9 t& s
{
" V1 K* L; z6 m6 p/ Y5 J+ Q platform_device_unregister(&da850_evm_tl_leds_device);
2 f5 u5 [# L% O2 @: L. h3 W8 a- W5 @9 y! `2 C$ ^4 e
printk(KERN_INFO "LED unregister!\n");- l' v- W! W/ O) P1 ^
}- g, i7 Y, b; [& z: G: h; P
8 q2 R1 s$ p$ f6 R0 jmodule_init(led_platform_init);+ u, x: t# t( M: J
module_exit(led_platform_exit);* v2 N# Z4 [; o( K5 r" V+ C0 g# ?4 H
% I) N3 s( ?1 H. v' PMODULE_DESCRIPTION("Led platform driver");
7 z; X8 Q# f& l; \6 K0 l( Q3 J1 ZMODULE_AUTHOR("Tronlong");/ l0 \( w1 M% E( b$ l; y0 b2 }
MODULE_LICENSE("GPL");# P3 b0 ]# z4 T. j+ M- Y9 h% g- N
5 K( [8 w( \+ T/ {, k/ Q |
|