|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 Y Y% T+ t) z, p
#include <linux/init.h>5 b' _8 C8 n! ?
#include <linux/module.h> |) w+ j. a- c7 f; y# d0 c( M
#include <linux/kernel.h>
- X/ W; \9 Q5 |0 h" F" l3 r& K#include <linux/types.h>6 D, [6 p7 ?' G7 Y2 b. h
#include <linux/gpio.h>
2 l% q1 S8 c- z( k6 l0 w#include <linux/leds.h>6 O* y) X3 V: @3 R2 N5 G! \
#include <linux/platform_device.h>5 @. C- D i% k* y: y% o' u
F$ O0 x; w- X! P5 \
#include <asm/mach-types.h>. S3 z3 ~! W8 T. Z w
#include <asm/mach/arch.h>
( d9 U, E, j7 u, u8 }; \#include <mach/da8xx.h>2 `2 Z# @. T8 y
#include <mach/mux.h>( E& F4 `0 R0 C
5 ~/ Q" Q5 z1 j" W( S% ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 O% I- L; ?" Q* S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- t0 n) d* R- { ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). k" v6 l" W0 Q* A; _% I
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 r; N' _0 d7 M: {; {5 F& b& Z. \: c- U8 [
/* assign the tl som board LED-GPIOs*/7 ^0 |3 H6 {+ }% s
static const short da850_evm_tl_user_led_pins[] = {. a. e, ]# | w; h% e6 v
/* These pins are definition at <mach/mux.h> file */
: Z B0 W( H E7 _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 D4 m/ R, v& i* k% Z# v T -1( q p+ c' ]0 u% K, p" \
};( b0 J( l: U8 x* B5 B& ~
% [4 K! F7 v# y2 [5 {+ z! ~
static struct gpio_led da850_evm_tl_leds[] = {
) w/ {1 m I' D) [- } {
; S- k# ^; }4 H3 m) H .active_low = 0,
/ i a* C0 [; [( f .gpio = DA850_USER_LED0,
( @( t3 m y: _2 \& g .name = "user_led0",1 {) G: F. ~2 h
.default_trigger = "default-on",
: V! t1 H Z1 u8 H },3 h5 A, g' ?* E: J
{
, W+ Y# o( i" d; W .active_low = 0,, q8 J1 @1 f5 x/ s
.gpio = DA850_USER_LED1, ]: M7 D! x, E+ E3 ?1 N
.name = "user_led1",. Q$ }$ {: e5 e0 H- d
.default_trigger = "default-on",
2 B4 U# d+ y6 w& n/ k! B5 ]7 @% O },
& a. e5 I' |# l! M0 \ {3 y# r# v6 l+ i( F6 w+ B
.active_low = 0,( U' A- h& J6 \: N: ^' s* {
.gpio = DA850_USER_LED2,
' z9 [3 {9 v* }4 t .name = "user_led2",
( F% w/ v3 m# `5 I/ l' R1 z. U .default_trigger = "default-on",8 r$ Q' @ p1 G* T2 E
},
+ t# M* |, C" G: q$ G- K. Q {: |0 s) @' Q3 ^8 w: z
.active_low = 0,
9 r+ V3 A/ y2 T. J( ^ .gpio = DA850_USER_LED3,/ o' p2 T6 t& t3 B/ U' S9 g
.name = "user_led3",! E: s1 J1 E. X& o1 i
.default_trigger = "default-on",+ z' }( A! v r( w
},7 o0 R) ^& Y3 E
};1 l5 I, Q5 ]# \: y' ~
. f( D2 H7 P/ e Q6 s9 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, W5 l3 v+ y6 U; x7 F, L2 K
.leds = da850_evm_tl_leds,
7 E/ L- ~ \' B1 v3 I" o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 s2 h3 T- V) {, W6 |
};1 f4 y8 W6 i% A [/ |
) q/ {8 m1 T4 F
static void led_dev_release(struct device *dev)
& X- L B0 K) W' U{' h7 @- k" B" }+ @ ~6 J
};
2 a: @* d9 Z- _9 g" q% m1 T
3 p- d9 Q; E/ w4 estatic struct platform_device da850_evm_tl_leds_device = {
4 r% U# n! d' p. A: c6 z .name = "leds-gpio",! w, C7 Y: ^/ R0 `2 d, k: W
.id = 1,
* z. P* d% D v- x& l9 ` .dev = {
2 [* R* M$ d; J o$ l( y .platform_data = &da850_evm_tl_leds_pdata,- l$ Z! b+ e# C% \9 a7 L& `# R
.release = led_dev_release,
9 L u5 ?" q# C5 Z, g& ^ }; N) C9 {: s/ L; s+ J. w; n
};
! `2 H# r6 E. m7 t- |. s6 ?' v) ~# G2 S; L. R6 w. N; a! J
static int __init led_platform_init(void)2 T% e% k, F& P7 L4 M
{1 x4 Y. \0 P* l
int ret;, Y( v! k5 O& _6 K& h" ?
#if 0: a* v% [& S. G- ?0 F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! t1 B. r$ i2 I: q- {& t) P: B if (ret)* V- x; y5 r+ z, Y2 E& k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, v/ X5 z/ B4 A5 I: V" K% x0 f, j "%d\n", ret);" M8 B8 j4 S2 v2 j
#endif
3 h3 }& D* M, |" f3 H ret = platform_device_register(&da850_evm_tl_leds_device);
' ^/ T# Z3 k; [# S! ? if (ret)8 l& J) J, j+ e
pr_warning("Could not register som GPIO expander LEDS");3 z$ Z" \9 n% I! n
else
8 k9 {. o) t& q y8 j% S6 G printk(KERN_INFO "LED register sucessful!\n");) {$ f4 \- w3 Y1 v* g$ f( l
: `0 D) P2 q& k6 p7 i' W Q2 Q/ h return ret;1 S0 r% |4 y3 x
}! r( [8 [* b0 c' L5 Q3 ]7 _5 [
$ O- w+ d3 }+ [static void __exit led_platform_exit(void)
: T) {2 z; F2 L" {{8 Q( {/ h' e( ~
platform_device_unregister(&da850_evm_tl_leds_device);$ }3 v* ]: I( j6 @! V, D: p: l
8 P1 D7 H3 f4 ?& T: E* V
printk(KERN_INFO "LED unregister!\n");
# O$ y& W& H, e1 R}! ~, ?7 y' H$ Q' R: A
* h$ H6 c, i" L
module_init(led_platform_init);
( G4 y2 X% l1 K5 Tmodule_exit(led_platform_exit);* T) R2 {* N) J, W9 u; B, m# M b
8 {( v$ }- F) Q
MODULE_DESCRIPTION("Led platform driver");
+ x* t6 \, Q6 [- F# s9 `+ Z- [MODULE_AUTHOR("Tronlong");" y ^# _/ t1 K
MODULE_LICENSE("GPL");7 Y* r5 W( |" S: j5 n# r. E
+ d2 v+ o) s4 x5 J* n |
|