|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 R2 @. {, L% e: F3 G$ O! w
#include <linux/init.h>/ g* v/ [! T7 _* l% G0 @: a
#include <linux/module.h>
" ?7 T9 J& J. w#include <linux/kernel.h> T" v. {, p3 V
#include <linux/types.h>: }! v/ \. _6 ~4 f! l
#include <linux/gpio.h>6 b- E, S+ [2 B+ p- ?
#include <linux/leds.h> c8 r3 v3 b+ f
#include <linux/platform_device.h>5 a/ T' h3 L* K$ k9 h) }4 V
# h, c0 q1 _) c ]( _#include <asm/mach-types.h>& I5 h5 p6 x1 z) A
#include <asm/mach/arch.h># A, P8 I9 G8 a" r) Y' [4 c# F
#include <mach/da8xx.h>
& w$ T4 {* [, e2 i$ F6 b1 w: S#include <mach/mux.h>
i+ i+ E }% q2 b) G0 q& j% Y+ ?9 [2 K5 B, b, \& o. w. s1 H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% ]( o1 y( m3 }, _/ t/ q% ^# r9 v3 w" x+ {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 [9 q* t% c# h4 s* N2 b+ Q9 T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 y" {! I9 a) F- C J# w; h, {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# j0 a5 X9 W$ ~% H0 A3 X$ N
5 j5 Z; d1 a: K8 [9 ]/* assign the tl som board LED-GPIOs*/7 G( D+ G0 T2 s- x# Y1 A( u
static const short da850_evm_tl_user_led_pins[] = {
4 g9 K$ v" z; x- S /* These pins are definition at <mach/mux.h> file */
* s# {5 I6 K! Y# G2 { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 k/ ^" @. `; c, T4 N
-1
0 [3 o ~$ C& u};0 Q; z# o* o y2 r8 o% q" g
+ d! ^7 q9 Y4 Q3 u& M: U
static struct gpio_led da850_evm_tl_leds[] = {
6 |' t2 `0 q8 L+ E8 ]: l {
9 x% s$ h; |% K .active_low = 0,
' r2 F' v( F- ?( b' Q .gpio = DA850_USER_LED0," O1 u7 [) S9 w% t; u6 b5 Q
.name = "user_led0",4 l" u# n, s/ t- p
.default_trigger = "default-on",
9 y2 f+ K" K7 S# H- V },+ \. E$ m6 q: a* `% }& v0 Q
{
! J4 W- Q& _0 P$ |" p .active_low = 0,2 z1 r' b( G" k y+ Q' J9 ]; _
.gpio = DA850_USER_LED1,: j3 M% f% r5 T: m' U) F$ w2 Y
.name = "user_led1",( T; Q" a9 w7 c0 h8 Q, A5 X
.default_trigger = "default-on",4 C5 c4 q9 o& O- Q' ?5 \! `
},( X) E3 [2 L& b& g+ ]; e( p, {$ }
{3 G4 |* P/ J& X6 q2 N- b: H7 \
.active_low = 0,
5 B' q5 ~2 `' {* b, S; f .gpio = DA850_USER_LED2,
9 H5 w+ P1 m$ o0 J- C1 j# |0 [ .name = "user_led2",
/ G/ o: P2 G; e. {! `* e9 \ .default_trigger = "default-on",
. I5 K% y: T% r2 t' g# w },6 c$ i3 I% g3 E0 t
{3 \7 T0 [1 U/ R! u% Y# @
.active_low = 0,: C# m# v! W& l* [0 J; X
.gpio = DA850_USER_LED3,( P0 e! o! O1 N5 K1 S Y4 A6 |) W- F
.name = "user_led3",! M9 B3 H1 b5 ?: k5 l! Z4 ^
.default_trigger = "default-on",
( p/ _: q& L+ v# x: Z( h },# d' Z) o p ?. e5 }
};. e5 z! e2 e# k5 e2 r& M9 M' ~9 c8 B
2 W: Y+ O2 R6 ]( V1 t0 ~8 G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 `/ [, A. K1 i( J! k0 _2 Y* e .leds = da850_evm_tl_leds,
0 z8 G/ G) x- z; j9 w ^ B8 u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% @" d) Z& {1 L4 T, c& H};
. r4 Q1 ^* `! {/ q! p& q9 w+ |' \4 A7 J
static void led_dev_release(struct device *dev)
2 t1 d) c5 j9 E# n( b{7 W Z0 W8 R0 o2 n: m' O
};5 u6 {! G$ I2 e' N2 R4 y
% Y: d( u% V% W" }7 t/ x- b% m
static struct platform_device da850_evm_tl_leds_device = {
4 z @2 @5 j# ?6 e .name = "leds-gpio",
' M7 t2 u) o. n# u3 z P1 H0 a: q .id = 1,
, Q/ O; A7 T# N! ^5 h5 J .dev = {
3 ?; ^, i4 D7 m- o8 `5 } .platform_data = &da850_evm_tl_leds_pdata,
( v! V& e! D9 @3 l- L& K .release = led_dev_release," `/ n4 \ _7 H- U
}
; ] B& w9 m* Z# ]( A};% `) i2 z; O' u' z
) Z; D+ C! ?- D2 [' g0 K: `9 F7 r' sstatic int __init led_platform_init(void)2 R0 h( x: i$ i1 F# s8 B
{
& b9 M; J* f/ d3 ~, U int ret;) |' w6 {0 |7 B& t! S% b, |" J
#if 0
1 b' P, B* t L9 G/ E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( [& c- j3 F8 j$ T
if (ret)( c* W- N0 S" Q8 C4 M! O1 Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 S/ E5 U! }8 g, c; f% N& l) ~0 ]% n "%d\n", ret);
; V0 s0 f2 n- d) ]#endif
/ g# N$ `! \* C) X ret = platform_device_register(&da850_evm_tl_leds_device);
M+ j F- l3 {% L7 F" }0 ` if (ret)
2 Y# |7 ]( u# }. ~( \# j. g pr_warning("Could not register som GPIO expander LEDS");
6 s5 e1 S& c8 H# d else
7 i( x4 d3 v3 g* D6 T+ Y B2 y printk(KERN_INFO "LED register sucessful!\n");6 S# \/ G4 E/ N! Y+ X5 q4 P
8 j& b8 Q; c: O" E. j9 z return ret;( T4 [+ {" C1 w6 H: b( D2 ~/ u
}! f/ i% g; T Q8 D
: U' m! I0 z- E# Z# u
static void __exit led_platform_exit(void)5 {5 f5 ~1 S6 z+ ^% u" x1 J
{
; A! u( v V$ o3 ^5 y. ?; K5 ] Z platform_device_unregister(&da850_evm_tl_leds_device);4 T/ V3 y: w9 p+ O" i, N/ M3 a: x
# e- ?, z$ Z# n( O. ^$ y( B7 m printk(KERN_INFO "LED unregister!\n");
. g, P' d+ ]# N- U$ T}& u) S( B9 R" c' H6 W
7 |: X6 c* n$ Z
module_init(led_platform_init);" u0 X% J7 Z$ _
module_exit(led_platform_exit);( H. t$ |/ Y, j7 _* l; W
" q2 {* a9 d M2 u. c
MODULE_DESCRIPTION("Led platform driver");
+ |; G ?9 ~ |- q; j5 P" Q7 eMODULE_AUTHOR("Tronlong");
0 b1 ~: N. Z$ x1 N9 |& c( V* |MODULE_LICENSE("GPL");
) N9 V& x" n" T
; h( w# {4 ]2 T! f$ \; w1 E9 T. ? |
|