|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' [/ B% B- u* R3 z) [( k#include <linux/init.h>
4 Z J3 z5 F% T#include <linux/module.h>
, E) H, `% G& H" a! |% r#include <linux/kernel.h>
5 I/ L& w2 \2 z4 O. a7 Q#include <linux/types.h>- L" R0 N* _, B+ c1 ?# p5 k4 f
#include <linux/gpio.h>" Z+ m! C" D; z7 @8 P' y E
#include <linux/leds.h>4 k4 c3 V b: X. ]9 }; u
#include <linux/platform_device.h>0 ]2 t! {) R$ Z' w4 q( ]
3 l# E" x6 k4 N4 Q1 W#include <asm/mach-types.h>3 S7 q) V k |7 O8 O
#include <asm/mach/arch.h>
: ^+ f) t* @* w2 E! s9 U#include <mach/da8xx.h>6 Z) _9 r6 w& j. k3 w9 j; o
#include <mach/mux.h>
5 O, B$ ]% |7 q" B+ R, @, P- ~; H% F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% E5 I" Q, t! c/ o G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 Z. u, \# n$ d8 t; F% @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- w7 {' ~% m, J3 d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); o+ u8 h# {! X1 k) q
4 D+ ]* K! Y+ q% `( e# B2 j
/* assign the tl som board LED-GPIOs*/! X# R3 C) d( b$ {, o' q: z
static const short da850_evm_tl_user_led_pins[] = {& ]3 U( \* j0 I s
/* These pins are definition at <mach/mux.h> file *// o% o: Q4 |3 A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' S7 P. K9 D9 q1 Z% w+ e -10 d' R5 I! {# N6 r9 u @6 P
};
: N- z# D6 u) g
: C u2 y% e# e0 @4 a) _4 wstatic struct gpio_led da850_evm_tl_leds[] = { `. M5 p5 L! N9 ]2 Y0 K
{/ U8 ?7 _9 D, \5 T
.active_low = 0,6 u! B$ `, {# q- q1 B1 e
.gpio = DA850_USER_LED0,
4 s5 \% D$ N! M) O .name = "user_led0",9 A$ P e3 ]! j) y
.default_trigger = "default-on",
U7 O. R6 [/ b4 e },9 S U# I+ L' [$ e) G
{
% G. X, I0 s% m% Y: ~# I) u .active_low = 0,
( J1 N9 i4 z5 R# I) L( ~' D7 `4 a! F .gpio = DA850_USER_LED1,
- l* m0 ~5 T7 j9 r .name = "user_led1",' P( c; G7 D+ J V5 j
.default_trigger = "default-on",
/ V0 d2 I- U p; l8 A* o9 F7 W },
* T ^. I9 i3 V d/ u- a, P {, c+ P, g( |7 y3 R
.active_low = 0,5 B$ x" x( R7 `8 J0 K
.gpio = DA850_USER_LED2, e5 Z+ I8 @% Q) C
.name = "user_led2",
4 t& y& j! z( q* H Q V .default_trigger = "default-on",
# W5 ~% W; k7 b },
) A4 s1 u* B9 ?5 S# i6 `4 w: \3 t+ o {
% T" w' X. j5 }- G .active_low = 0," w: X7 Q7 ~& N, X/ t; z" W9 _; ]
.gpio = DA850_USER_LED3,
+ F/ Z! f7 u( o4 U .name = "user_led3",
2 j" z& u, B* ~ .default_trigger = "default-on",
3 d' v) e' E4 w/ w. N- b },# \2 n7 F8 a" D5 m( b
};' ]. e$ g! ]# r& A+ a
9 t& k' n. w3 `1 t/ r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% V7 O: {$ a/ S* h6 K
.leds = da850_evm_tl_leds,, t D$ J2 f: @: ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 w8 H$ e2 O& H( d; o- |, ^8 u};
: c% g4 E* T3 z; |- [6 c
3 [, l) @ F/ E+ T! w- I4 Istatic void led_dev_release(struct device *dev)5 ]" l- x8 p3 T/ R+ D# M6 u A$ h( _
{
3 ]; T8 m* v8 L. G6 i4 m};0 ^" K7 n( `2 C+ e" p; m
$ L( l; B T s3 h# K0 b9 S
static struct platform_device da850_evm_tl_leds_device = {
9 V2 w( _+ j) [, C0 ? .name = "leds-gpio",
6 d7 U% V% p! H0 L' J .id = 1,
4 Y+ z2 Q! O0 h1 @/ L1 @/ c6 _ .dev = {
$ k+ f2 B7 B/ h. ]# C) x. n6 I .platform_data = &da850_evm_tl_leds_pdata,' z8 C8 O9 @: }5 e2 l$ W9 i
.release = led_dev_release,
; t/ \9 [0 ?* a* T* P$ N8 M }1 s( C0 I2 h7 I3 z' t7 H" X
};
, T$ g4 B6 Q, e: m/ n" K1 L
4 |5 d- R, z" J1 o9 p3 B! V! M7 Jstatic int __init led_platform_init(void)/ k; ]8 m4 O! T. s8 _
{
! y/ Y' `' ^; z int ret;% L! B+ p6 o0 D% J
#if 0# @8 N; V. j+ d4 T5 b
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! q8 t- C6 h( b. P) Y
if (ret)1 X! S5 ]) ]0 ~ J! a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( l6 x5 s+ j2 P' a+ m' b* J "%d\n", ret);! `0 _4 ^4 N5 B3 @% x8 e0 a
#endif
. F6 c2 p( q2 J ret = platform_device_register(&da850_evm_tl_leds_device);8 U E: M! M- B- @
if (ret)
7 F+ l/ ]" P' ]9 | pr_warning("Could not register som GPIO expander LEDS");
: _4 \! b) b6 R O4 k3 G7 c else
9 P; o1 n' f7 [* h" I9 G printk(KERN_INFO "LED register sucessful!\n");
9 ^- k# x4 d X. O* [, V$ ~3 M. l1 s! p4 [
return ret;
- L4 R( ^9 ^0 M5 K R6 U- n5 C, D, g}$ R7 e2 I9 e$ C6 {4 Q/ I
' {# }& ?$ q1 |+ Y1 S+ g6 zstatic void __exit led_platform_exit(void)" k9 j+ c( G" z
{' ^) ?& Z1 ]8 e8 d' ^
platform_device_unregister(&da850_evm_tl_leds_device);
3 i% E: |' y- i# p( ^, K' B
) q* M$ u# w+ d7 P0 \% V printk(KERN_INFO "LED unregister!\n");
9 o5 [7 [( {2 F! c A7 C}1 x8 l: Z2 p5 d( D+ S8 ]
A: {: t% K+ p" Z( Q
module_init(led_platform_init);
, ?% j/ H R. ~module_exit(led_platform_exit);
* |* J' t9 ~& e, ]
' ?! K" X D$ d- F3 m' ~MODULE_DESCRIPTION("Led platform driver");
6 t) N" K7 M+ r" z" _" JMODULE_AUTHOR("Tronlong");
( `' M( D* }/ C+ l4 H* bMODULE_LICENSE("GPL");
3 s3 G' E, H- j0 r' J
d; P% B) T5 {" [: [ |
|