|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! _' ^' B3 [! G* W( R( _4 l$ ?, N# A
#include <linux/init.h>6 X q3 j3 E" |5 D% U2 z
#include <linux/module.h>
( o; U1 @* M+ [' u) Q#include <linux/kernel.h>
2 i! K. e7 e2 v3 }#include <linux/types.h>/ Q& ~9 b0 y8 c4 m. m
#include <linux/gpio.h>
3 r5 i0 J h- N6 w#include <linux/leds.h>
4 Y' ~2 q& \( ]+ U: f" u#include <linux/platform_device.h>
9 v9 N" w) u k0 W
/ j2 E$ L$ T) u#include <asm/mach-types.h>
6 }4 |+ i5 d2 e, l: T, P#include <asm/mach/arch.h>: X$ R; ~- w# ~2 ]% J! Y8 X
#include <mach/da8xx.h>
) k# A g" j5 w; \2 X#include <mach/mux.h>* w4 H, |0 F8 w
3 N) Q4 n! }2 u% h' ?% E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 ]' ]7 h* r7 ]* U8 m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 b6 L' B+ e+ z- v0 x. ?: J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); W5 G d$ c0 m: d" b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* |- K0 r# q O7 x/ S% b( l
1 l+ T4 `/ s8 T- `
/* assign the tl som board LED-GPIOs*/' k+ I/ G# ~1 f# `
static const short da850_evm_tl_user_led_pins[] = {1 u4 ]( c$ M9 p3 r
/* These pins are definition at <mach/mux.h> file */
4 p9 b+ e; V6 h$ D1 N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* a' p9 N! M! ?9 ]- l+ {0 l' Z
-1
1 T! T, L7 e4 N0 p% j/ C6 m3 D! h};
% G4 R# e/ w7 {6 o$ i$ z# n7 `6 P4 q
static struct gpio_led da850_evm_tl_leds[] = {$ `' Z% p" I- ~! y/ t* a5 Y7 \
{
. K9 b3 l. w4 J, ~ .active_low = 0,0 h. x1 m- m3 |* j. M, q
.gpio = DA850_USER_LED0,
/ o$ v6 U; ~5 I2 R" A" i9 f; n; ]3 T .name = "user_led0",
5 d% F" v8 v: O) q, P# P .default_trigger = "default-on",
( z6 \3 T! F5 d },* ?$ k# S5 x2 m1 l2 A- B& _
{
) H; S8 W) h* M8 C* c/ B .active_low = 0,
0 X# K# w/ o( P. N3 ~ .gpio = DA850_USER_LED1,
$ Y6 x$ c& b3 r N& s+ J5 ]$ k! W .name = "user_led1",) e8 Y* W; W# H7 T6 h$ A$ h
.default_trigger = "default-on",; I6 I" m1 q6 Z' C- _ H
},' Y+ Y5 I: g6 O* i
{ i! n' }: @: [/ ^' l2 w& Y
.active_low = 0,
/ G V |4 v( l" w9 z .gpio = DA850_USER_LED2,
0 B _5 L& N# E( ~ .name = "user_led2",
" b' r* f, U$ j- Z .default_trigger = "default-on",! K" E* L5 f( Z. E
},
; v+ I1 H8 O/ y& G; @ {
8 W! f' j+ B" t6 h& p% X, P" R .active_low = 0,
8 a: V5 K+ o2 W3 k5 m% C! z3 d .gpio = DA850_USER_LED3,
/ @( i4 x4 T j2 J3 N+ K .name = "user_led3",
! x# {& d: Z i! {7 d! h! `5 b .default_trigger = "default-on",
; m2 A! q U/ e7 {6 } },
: J6 ?* T$ o& I+ e};# Q* C: q2 q8 q# p
7 `) E+ V/ R$ I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ C9 p3 E2 p0 i) ]+ ^. | .leds = da850_evm_tl_leds,
8 I3 Q. |' s# ^7 |/ f Y1 } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* \: i) v4 x/ T
};
8 R* ?: J; O9 y! \ A7 \* p1 P1 D' ]. U; b
static void led_dev_release(struct device *dev). P3 t* D( L5 Y; Y+ r3 P+ X
{
3 J! b. Z5 f4 J/ q( O e0 Q};
* G1 ^9 J( m/ E+ B% m8 @
1 t& ~$ R) w* X$ g$ I; J: @. K! estatic struct platform_device da850_evm_tl_leds_device = {
8 p- O( Q/ X+ H1 X3 G( K .name = "leds-gpio",. G' L+ F/ d0 a G3 V5 g
.id = 1,0 `2 n4 H7 S- t, k7 @& Y% d- I
.dev = {
) Q* k, g5 y# U3 h6 G% r* n" S .platform_data = &da850_evm_tl_leds_pdata,( X9 Y1 I( a) M* s# F/ _
.release = led_dev_release,
8 [% y6 P( g: x2 u }3 i: X1 D I; R; V9 I$ h
};* T/ v! R7 V, k% P0 e0 N) d, j
9 d9 w1 A1 i% B E7 W' }1 j: S$ L9 @
static int __init led_platform_init(void)& l U2 G2 j# ]# M5 G$ q$ c0 M) N5 n
{0 m/ w8 O. c; N3 I! P
int ret;1 G: @2 @2 R- q% B" p0 ?# \
#if 0! n3 L2 u0 A; ~- k3 P5 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 [: p0 z' t6 d7 k; t8 B/ k
if (ret)
$ j& b$ |9 U' o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# K( i! `$ D9 P' G: {4 V "%d\n", ret);# c5 N0 @. a. f! n- C2 `
#endif
; g F7 J- }! V$ E ret = platform_device_register(&da850_evm_tl_leds_device);
* f7 H+ G- k" x- @$ ~- P, W) F. Z if (ret)
9 u0 I2 G, r' {$ c7 U4 x+ j: e# V pr_warning("Could not register som GPIO expander LEDS");
& b& ~* B9 g7 _7 @: f6 g else+ M8 A7 w9 H0 h. ]3 O9 F
printk(KERN_INFO "LED register sucessful!\n");; f% n- c& [- P4 L s- c
1 E4 B4 b. |3 T, q* K" H7 x5 g
return ret;
: E" g8 i; o* y+ ]}: R9 B4 V; _1 G$ Z) L$ S
6 @' W7 M5 d6 j3 Q2 l, f
static void __exit led_platform_exit(void)* j7 F3 j$ c! r( i9 C$ D+ n! \2 `
{
0 m: I. q6 o+ h& j$ p3 k' p$ U platform_device_unregister(&da850_evm_tl_leds_device);) ]5 s# B3 _ T
4 [# R% k; i6 x. [ printk(KERN_INFO "LED unregister!\n");
. }5 K" q4 w5 l( z- Q}
, D) W, O* {* ]% T; l4 X" t- \' {3 U, z* o/ c1 _* O2 |
module_init(led_platform_init);
7 w0 z; C5 h3 m1 W* o2 D1 K5 tmodule_exit(led_platform_exit);8 }9 S. a3 `! O5 w! A6 T8 Y( n
@2 R! {) m6 p6 g3 U5 D
MODULE_DESCRIPTION("Led platform driver");
9 b4 [) Z# F! \4 D1 B3 c2 _MODULE_AUTHOR("Tronlong");
~: l5 k+ x5 G( K: t/ qMODULE_LICENSE("GPL"); Y. g% | H# g
5 W2 @& R$ H* ?0 ^, x! Z |
|