|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 S# C5 s+ N0 V& Z9 r' o0 A
#include <linux/init.h>
) k+ m; m$ T; m+ j#include <linux/module.h>
& I H- @; C: P1 @0 z#include <linux/kernel.h>) Y% Y# E* k5 M/ C( Y* b/ ]6 g4 N' r
#include <linux/types.h>
+ f# a0 R2 U: U, a8 s1 ?) j9 I. b: ]#include <linux/gpio.h>
* r* R- s% U* a- d1 w- U0 H#include <linux/leds.h>! g {. c- _3 H6 l
#include <linux/platform_device.h>
i( X: O, O" e$ |# i
# h2 j \6 l1 T: c#include <asm/mach-types.h>, v# V- O5 ^4 j4 ?5 m# j" Z9 ~8 T
#include <asm/mach/arch.h>" U7 F1 T/ }, U; U
#include <mach/da8xx.h>( [3 @/ p, X( l* Q9 n4 N, h
#include <mach/mux.h>3 d: R2 b% V% {: H
0 |; b, W; x% q2 m! H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* y7 w* L) M' d; r% D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 y6 ~6 F. D- w. f c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) e0 c6 |+ {2 F9 s8 ~: |( d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 ^. o0 o( c$ _" Y; h& O5 n7 u8 F& ]+ `
/* assign the tl som board LED-GPIOs*/2 J* b( a% s, V. R& {3 O7 D
static const short da850_evm_tl_user_led_pins[] = {0 Y9 p( V' s% ~$ n/ M6 Q
/* These pins are definition at <mach/mux.h> file */ X4 U6 V! M" F3 r! P; \0 n, \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- R& G* k* F5 y# Q1 B- j
-1
7 D u7 T; i+ D4 _: v( m};( @; O. F! R1 Q- C8 w
( H6 E: K. y. X2 P, gstatic struct gpio_led da850_evm_tl_leds[] = {* k! ^! J, w0 X; w
{
9 s7 I6 q4 X! t" S5 A. Q( J .active_low = 0,* d0 i$ M. C, o. I1 y. H6 v
.gpio = DA850_USER_LED0,( Z3 I1 p* M# x m# S4 i: v& Q
.name = "user_led0",) G$ n- {( \. D* j
.default_trigger = "default-on",
( \- q5 a% G7 X; f7 x e },4 U) }4 k F: D2 q* f
{
) z Z- { R7 r& Q0 @7 ? .active_low = 0,
0 x% k* U3 ~4 l4 e- @0 v1 U% z .gpio = DA850_USER_LED1,
! S; g. p) D+ N' R+ s$ g6 L; B .name = "user_led1",0 \: x0 r% Y' ?( y9 O
.default_trigger = "default-on",, U2 l8 @$ [+ W2 T
}," x K3 p: G, F- S" ^' g
{
& X# t+ [4 _$ Q" O, a .active_low = 0,) x% U4 l& t2 b5 F& y
.gpio = DA850_USER_LED2,6 w$ @) [8 D3 r2 u
.name = "user_led2",
( r; K, D& d" x .default_trigger = "default-on",
5 P" M/ ?. q5 ~ },
. H4 C4 j$ ]* T& B# @6 D {
6 ~7 _2 Q q( v) b' D0 Z7 y3 W .active_low = 0,5 F$ e& O% t7 O8 V5 ^
.gpio = DA850_USER_LED3,
7 k' r1 S- A/ ?. b& \ .name = "user_led3",. H7 X. J) b7 O Y, E, V
.default_trigger = "default-on",
; o/ k. \7 X0 [; m, F3 k8 O, {4 s: D },
% _2 g4 q) _3 p( k4 o2 m9 s4 D. Y};$ U u& b2 _! E: g
' q! Q6 O6 t' k" [5 T5 ?2 q. X! Y- hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, F; q$ i$ |; Z: q .leds = da850_evm_tl_leds,7 ^) @' P' b& X' _4 n1 V$ p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' G" w) o0 h( a0 y% r4 O
};* R# b& `# o3 n
e; i' h3 _- O: ~ I( Estatic void led_dev_release(struct device *dev)8 q5 ]- W: w& p' I
{
2 O5 S1 ^5 r6 V0 N};1 `& J4 Y' q/ t7 j
% g* Y/ @3 ?: U
static struct platform_device da850_evm_tl_leds_device = {
3 Y9 M9 m( `! l/ F' c* j .name = "leds-gpio",+ \6 v4 d3 P/ R- b; y0 W
.id = 1,8 D$ Y- O4 A/ H+ p7 D9 C
.dev = {
6 ?( ?+ l- m: A2 p7 i .platform_data = &da850_evm_tl_leds_pdata,
' ?9 n" A# K. W7 |- S .release = led_dev_release,
2 ]. S2 r0 z3 t }
( _9 s% B# Q: b- _/ {5 |* K};
7 b; O, a ~3 _$ `
/ p/ {3 C4 v* y' lstatic int __init led_platform_init(void)& J: y$ j9 \, H8 Z/ D6 j! _# O
{
' G% R) A& [6 x( H5 j int ret;
0 R) M6 s. D! D#if 0; ?: U8 m& A1 U% I) I. v/ ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" F9 ^0 W. \, o+ h8 D
if (ret)
$ I) K1 \7 l J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% `: b& O e5 a* F. ~ "%d\n", ret);
& b s. p" @2 q& f1 M- \* p* M- ?#endif
8 k4 v( M1 N1 O( h3 d ret = platform_device_register(&da850_evm_tl_leds_device);( g. \# a' K& ?5 C$ d) z. D! y
if (ret)$ F+ C# ~' ^" S8 B/ w2 c
pr_warning("Could not register som GPIO expander LEDS");
; P# a6 p7 m. d. j8 g else
5 N# @4 h) i( }+ a printk(KERN_INFO "LED register sucessful!\n");
% h! G/ D8 a! L/ S- Y2 ]" P
# g$ V- y! v( Y$ q5 R return ret;
# C7 c1 F. H( {7 S v( ]}
- J. l( z& L* C- ^) x" Q, a4 X& j' x% L% U7 A9 u- g) l. w, y
static void __exit led_platform_exit(void)
$ k% G: t7 Q9 X5 }6 D. v% ^{' `3 c' G3 t- e& Q
platform_device_unregister(&da850_evm_tl_leds_device);6 N+ z p: i S9 Q! x
x0 p4 F! q% Z& S; F& ^) M- k printk(KERN_INFO "LED unregister!\n");! r. ^- L3 Y# ]8 x- r( C, U
}- g; O; m* K i Z' I5 [
2 c% R [" G4 }% E5 Q( B
module_init(led_platform_init);1 _! z) B6 ?. e- z }
module_exit(led_platform_exit);
+ `4 P' O' Y- a, v
- K! x6 f7 s7 J6 ?: S R* b( eMODULE_DESCRIPTION("Led platform driver"); w) ?, e/ X; K \, F" {! F E! W
MODULE_AUTHOR("Tronlong");
; f# A9 u* j0 `# j; GMODULE_LICENSE("GPL");$ ?; r7 `$ g U' X3 H! X
4 X) r5 O8 e. |7 k a! N6 }- O |
|