|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
X6 `7 {. t7 b$ l/ ]5 u#include <linux/init.h>
! m# l5 T9 S+ j0 x- L+ F#include <linux/module.h>" `% e7 R* f' ]) N& | L
#include <linux/kernel.h>3 q7 Y4 t2 @9 M3 g' l
#include <linux/types.h>: C: t" @, @8 Q2 X# K: |2 f
#include <linux/gpio.h>
5 {" N6 N: v0 ~0 l; s% a#include <linux/leds.h># A% W% Y3 i9 J* z8 F+ t1 F- N$ J
#include <linux/platform_device.h>
) ]) A! J" x+ k: m# M {
! L5 ]" f% A2 z, z1 i#include <asm/mach-types.h>
& |% z# y3 c0 H: g#include <asm/mach/arch.h>2 B; t5 k4 \- ?6 B
#include <mach/da8xx.h>3 f) G" x1 r% ~- h* ~
#include <mach/mux.h>
; J& D; m3 z+ @* W( {# j Z) l. G9 e* ^4 ^5 m7 _; Q) L" n3 @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 c& N6 e2 M5 O: u k: N4 V1 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 @7 a7 @, i1 f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" e$ O6 N7 i1 Y. T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ L. m" G# c* P3 c
% Z6 F) W7 E* R$ u- U) B
/* assign the tl som board LED-GPIOs*/
$ `+ s2 ^$ D' ?* C1 L3 nstatic const short da850_evm_tl_user_led_pins[] = {
: P8 J; o$ W3 p8 K2 o% B) e6 E /* These pins are definition at <mach/mux.h> file */
, {4 p. { D+ s1 s( [( \# z5 Q& A; Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 D; I$ }- m$ `, s0 ^* V; D -1
. m7 ~: q; K& g4 J5 Y& g' x};( q$ j% |5 y: U% T
) X7 L1 l: F5 ]6 ?5 ]* X% Z4 Y$ {
static struct gpio_led da850_evm_tl_leds[] = {
3 j9 ^0 b8 Q* q! [5 p* c/ [+ _' m/ s {
7 `8 b% |) n6 R* [7 P1 | .active_low = 0,' x' t: { Y n
.gpio = DA850_USER_LED0," s% j' q0 G" ?9 z T4 F2 |$ p% I
.name = "user_led0",6 V2 f \7 b f+ i, F. U
.default_trigger = "default-on",
|8 c A' R: c$ r( W1 _( W },5 r6 m* b& F! S, S3 M- s
{8 e6 F! C+ E4 s; i: F; ` C
.active_low = 0,
) E! @4 b- C8 x# W' J: l4 X .gpio = DA850_USER_LED1,
: l* T3 G" L+ d4 Z .name = "user_led1",
- B( l7 E1 Z0 X( M( @# `# W4 y .default_trigger = "default-on",
$ p: k: `3 H) J% M },( O& t K7 Z/ W/ p4 h* V
{
' e6 P9 L% K4 e! P& M .active_low = 0,
, R% ~1 A. x: l: L% i .gpio = DA850_USER_LED2,) ]! l( N7 l4 f2 M& [3 v
.name = "user_led2",' b7 X8 r) @: c) C; a: q
.default_trigger = "default-on",
3 r" G8 _& ?( N4 C },
8 \6 v, z9 o7 |# K% {& ] {
6 U" A9 S2 c2 l' v6 ~ .active_low = 0,
7 M" h% c. y7 E3 H9 B, g! { .gpio = DA850_USER_LED3,
5 c X! r) F5 } m( q7 v .name = "user_led3",
$ G: B' c8 v5 E$ ~2 H0 V o% c .default_trigger = "default-on",/ B! n/ t- l; ?! ~% t) v0 }- c
},0 e! _# b) G7 B; u, W
};
: x8 V% n- A7 `5 z6 p5 q
2 d# H7 S& x( c9 o/ Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 t1 F4 M# _8 \, W3 o" F$ r; L
.leds = da850_evm_tl_leds,( `! F7 f7 l4 p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- }1 v6 p) S6 k( {+ }- B& ?4 _4 D};/ T. v2 ~8 |" w6 e0 t. U& |- C1 }
2 k6 D4 l; X; w
static void led_dev_release(struct device *dev)
% y8 e7 q* k$ |6 F{! y/ h* u$ s- `
};
1 Z5 q- B0 O! W* _( l2 b: i n
static struct platform_device da850_evm_tl_leds_device = {
$ ~) s0 d- }" |$ Q# q( ? .name = "leds-gpio",
) o7 ~( b1 Y- z0 N$ p c .id = 1,9 J$ o% @' t6 V9 n P
.dev = {8 A! B' @2 Y& ]9 V1 _
.platform_data = &da850_evm_tl_leds_pdata,1 O% k' ?- i0 ?% r, F
.release = led_dev_release,5 ~" N+ y" q7 V5 h
}+ j& \ d/ I( l( J, F6 [
};+ w( t: d; L: O
* ?$ F# ]( y7 `( R+ L. i
static int __init led_platform_init(void)1 O0 S2 I: u; }1 h1 u+ b) H
{* w! |0 R$ w0 u! V
int ret;
5 i8 C0 s7 ?1 v R#if 07 ^* ~% T$ A7 t! A3 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 W$ S4 |+ ~ `) P& @: a if (ret)
8 N" f6 S1 D) Z0 ]) v pr_warning("da850_evm_tl_leds_init : User LED mux failed :". A$ s& ^% b4 Y% k" V" K) |( P, }7 i
"%d\n", ret);/ h$ k; L1 [, Z$ y7 B+ {
#endif6 Z2 Y8 E G- f1 i4 j
ret = platform_device_register(&da850_evm_tl_leds_device);
/ I7 `8 l1 }& _; M! U. B# p1 B if (ret)
7 j& \& ~# M# ]0 V pr_warning("Could not register som GPIO expander LEDS");- c* S( a C s7 b% ^& J
else1 [" `$ P8 a- S! K- d
printk(KERN_INFO "LED register sucessful!\n");
( Z- L: C# e t, J. X: o9 ?
5 U3 O3 ]/ p. x& ^% f5 H# y return ret;
8 d h% S1 X' W I}
! L+ \# W; W" i* }$ i
+ Z! J- m6 m# ?) x2 _* Y4 qstatic void __exit led_platform_exit(void)
# P7 Q) J% V7 M1 r, K{
/ P; S& z8 _- K0 W platform_device_unregister(&da850_evm_tl_leds_device);
1 \8 I" J8 g5 c( l6 ?) a( S2 ]; O, }0 c6 T
printk(KERN_INFO "LED unregister!\n");( @" U; m5 F) J) r! V, k
}; X* ]! T! l$ J6 ^7 `
# R5 Z1 c/ `; x) v& s$ i8 Q2 @
module_init(led_platform_init);
; M; v5 v. j2 j Hmodule_exit(led_platform_exit);+ F$ ]2 R( J" S; ~- U5 W9 R
, R+ c1 S* j" ?/ ?4 t E
MODULE_DESCRIPTION("Led platform driver");
- q1 H% f0 }9 r; c/ x3 A, SMODULE_AUTHOR("Tronlong");
4 t; w9 I/ c$ l0 vMODULE_LICENSE("GPL");
/ \5 R! ]7 E* K( @" Q+ T" H) e/ x3 q
|
|