|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 H6 \% t% N+ O" [4 n#include <linux/init.h>" E# y9 {5 S& G9 D8 O4 W
#include <linux/module.h>+ ?0 P+ F" ~0 B
#include <linux/kernel.h>
' Q4 z/ \% A* }$ [#include <linux/types.h>
$ q1 m* ~/ I( T( ~4 C1 |0 N- L( r#include <linux/gpio.h>% P: W" H1 P- E/ O: u
#include <linux/leds.h># P+ `7 o# {: H5 V3 t7 o
#include <linux/platform_device.h>
3 d+ a3 ~% M2 r0 e: X& t0 ]3 q& W" S6 a5 W& m/ ^
#include <asm/mach-types.h>
5 i& j0 u; Q# k3 D- o2 X) B/ j#include <asm/mach/arch.h>
( v; i- \! H+ t7 ^2 ~" u, _1 O#include <mach/da8xx.h>
1 b1 J+ D$ L1 y/ v/ ~5 [3 g' I' e0 ]#include <mach/mux.h>
5 @; S# w, b! {
6 O: E0 }5 c; \! ?: P, I& P& t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- {% z- s# a% K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 [7 O" O2 |3 B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* U3 \/ j- w, t+ e2 q5 K/ B1 C7 v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" q3 Z! R- A1 r3 O2 E0 @" y' \% C6 O
: T: M" I5 b1 B" ]/* assign the tl som board LED-GPIOs*/
" C1 F' W6 f4 m& n/ cstatic const short da850_evm_tl_user_led_pins[] = {. f+ N9 J# X9 {' V& S& }( k
/* These pins are definition at <mach/mux.h> file */
% d4 f$ e& [" i) X8 [3 D, _) |# K& p DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; F. _ F' R( d0 ]- J
-1
( U( M" V( E. T};
% ]' T q* h/ ^
j/ x/ Z0 M4 D" U( ~1 q, Estatic struct gpio_led da850_evm_tl_leds[] = {
8 O+ |+ w7 x5 G" K% S, F {
* T0 E2 u5 x" ^; I2 H( ~ .active_low = 0," C+ n7 F1 y6 B! A" i% M
.gpio = DA850_USER_LED0,8 ^, i+ W4 I; ~" I9 i
.name = "user_led0",
+ J/ d6 A+ [: k. L: z .default_trigger = "default-on",
0 ?$ _* [ J& e( K. [0 @) H: T },8 c0 A% b& c& D$ q# h+ ]& T* `, F
{4 s1 I# M; e, x0 c' ^. m
.active_low = 0," |# d* `; K1 x
.gpio = DA850_USER_LED1,; c( J1 X) D; e* [( i+ L8 X' h/ H
.name = "user_led1",
" l l8 F0 s2 z# |0 W$ n .default_trigger = "default-on",2 ? m9 q" v m! r; j/ ^ F. H8 h3 M( @
},) ^3 r5 ~! ^ a! K4 h) I7 T
{- r3 b( S& b" l0 m
.active_low = 0,
. O7 Q0 v6 u2 U# ?2 `8 j .gpio = DA850_USER_LED2,1 z, M6 y$ F" P
.name = "user_led2",* @# z/ q- `% ~
.default_trigger = "default-on",
$ t# m# |6 @) ]# s( U$ T; w7 ^* c* I },
! a, J8 ]& v* M/ y4 u7 _ {
- L- t6 `: R' ?, d( T+ b$ m M .active_low = 0,6 V% j: e5 t! _5 k {* I( ?
.gpio = DA850_USER_LED3,
) @4 G: G- O1 g4 L! P3 Y .name = "user_led3",
9 `2 d6 D) n3 n7 w% @ .default_trigger = "default-on",
0 c0 g: \5 B4 z2 x. @* B* H1 o },! x6 Y: w" H# {. h
};
1 `9 P# i) X$ o, ]6 k& Y: n8 d' \8 \$ ?, ^4 N( t; \+ N# N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 h0 s3 C0 U: b
.leds = da850_evm_tl_leds,
( R2 n$ h. o/ Y: ^7 G W1 D- D2 d9 Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 C8 o0 ~4 n, y" p5 L9 J
};4 Q! p: O/ G' @# g7 R* _
% l* g; r2 H7 Z6 _% x# ?1 o8 _. ostatic void led_dev_release(struct device *dev)# M1 q7 J5 ~" {( g% {4 A P( q
{
3 {1 g3 b3 G( M0 ~' T# ^};
0 k- U' Z0 X) k, V' ~! ` w3 Y3 b4 m% j: l) A
static struct platform_device da850_evm_tl_leds_device = {5 u; r, S7 n, c& ^" E; X9 n
.name = "leds-gpio",
! g4 d/ Z( b! E8 A+ A9 s& E m- v .id = 1,
7 g6 Z" [( Y" S* `8 B7 _, [ .dev = {: M8 U* X! `. ^$ L! k
.platform_data = &da850_evm_tl_leds_pdata,
# W/ H) e" q. G( p* r* u9 R9 t3 l .release = led_dev_release,8 W/ X# s; E' f% N1 ^
}6 [# T7 a; g7 N9 q) r
};
3 L, w" k: r: g# ]# _) a! x g& n9 k. }9 ~; d; ~+ _, }; ~/ i% R
static int __init led_platform_init(void)
$ h& ~# O3 G, k- T$ B6 e. {# c{7 r, _1 B, h9 p1 j, ]
int ret;2 X- z2 S/ X% g& j2 Q6 J/ i
#if 03 y, j9 W% ^) ~' G! b0 @* o$ \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: X8 P0 v# @8 ^+ Y0 y- B4 n* C if (ret)
9 B9 E. G) M: ^: P3 [6 N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 }) C$ i/ ^# ~& a& l- `2 z "%d\n", ret);: U9 t7 P; ?5 z( p5 J6 v
#endif! c! z& B Y3 q: s% r
ret = platform_device_register(&da850_evm_tl_leds_device);8 f' y) O5 x( t& j: B1 t: p+ m
if (ret)! @! Q0 g/ U& W1 k
pr_warning("Could not register som GPIO expander LEDS");; w/ x2 a& @( ]/ Q3 V7 m- G' U
else
2 b0 L, {4 k$ n printk(KERN_INFO "LED register sucessful!\n");) \' r, ^& z9 l, _4 G
' G" I1 l$ r4 {& \9 u return ret;
. [/ Q- j$ d1 q6 A. j}6 B) [% U& t+ a' _
2 r, V* J5 g+ Z1 O) H; Gstatic void __exit led_platform_exit(void)
8 R" l$ b8 ?6 V% S; u4 P9 s{
5 A/ K5 |& i2 |5 [ f+ D9 s ^ platform_device_unregister(&da850_evm_tl_leds_device);) |* d5 Y, D V1 D2 _# G! }& l: O7 Y
! W4 L) f; H5 P; u4 t printk(KERN_INFO "LED unregister!\n");4 m9 Z6 c( b: c+ W9 R
}
- n2 q3 F$ n+ ~! r! V4 H/ \; s0 N. Z/ `: @+ D$ K
module_init(led_platform_init);2 O3 {6 ~1 B- x# `+ a* X+ i
module_exit(led_platform_exit);6 O- h/ r; n' C7 J
- z6 p r% l6 B& `7 d0 }( B
MODULE_DESCRIPTION("Led platform driver");
# o% G3 m' j) U5 _6 WMODULE_AUTHOR("Tronlong");
; F0 n- h- Y; B/ b( u9 tMODULE_LICENSE("GPL");
- N! ~+ }, `2 v8 ^4 t1 {
; r6 D, `+ {8 ? |
|