|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 R7 e* l/ } D3 Z; L
#include <linux/init.h>
# y9 M; n5 d" s, ?. j1 A. \#include <linux/module.h>
w1 U( @4 f" K: O. \#include <linux/kernel.h>
% H3 F: a W# Y1 @7 X' _, x#include <linux/types.h>
% D& T0 e+ y |# g8 M' K; e) y#include <linux/gpio.h>! G) g" G, u4 B b
#include <linux/leds.h>" K6 s- m4 e/ c
#include <linux/platform_device.h>% y3 W: ^% C1 Y: t2 Q
: | [* E2 h* K& D* j% Q#include <asm/mach-types.h>; C) o; E8 Y }; A* k3 X) G
#include <asm/mach/arch.h>
0 }: ~* n4 k3 W) J9 B#include <mach/da8xx.h>
8 q, C6 Q- _% C4 q+ K#include <mach/mux.h>. I& A! c& M: t) K/ ?# `% S
, |! f) O4 C: Z& A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 z1 W/ A( ~6 I) z6 Q ]- P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# w8 {# O0 ^3 M7 ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% v5 ~3 D: s2 U, l A#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 K4 j% l' P0 u1 w4 @& P7 G, F' w" o! O3 u
/* assign the tl som board LED-GPIOs*/7 a0 L [% Y. u" D" H
static const short da850_evm_tl_user_led_pins[] = {
) _( G- s8 {9 Q /* These pins are definition at <mach/mux.h> file */' Z* F4 J# W/ e2 @% T& [- B2 G6 b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 a* q; C& e( k& h -1
/ \, U* B7 L5 p9 v};
2 p& v0 c! P9 p* f) ~) p4 _
% R1 F& v/ L7 _; u+ Estatic struct gpio_led da850_evm_tl_leds[] = {
' C/ y' ^" F4 }9 z7 f& u2 s( |, @ {
4 r: x) e: f) e .active_low = 0,% _% _3 v9 d! {& M
.gpio = DA850_USER_LED0,, |. c8 r, d5 B- M$ V
.name = "user_led0",
: ?7 @& O+ {3 ~ h .default_trigger = "default-on",9 p R% O- ?2 d; K
},6 V7 a/ H/ z5 J% x
{2 k; H. q% r* [6 a8 F
.active_low = 0,# w+ k P9 t; j" R) F" D
.gpio = DA850_USER_LED1,
/ g! v0 x4 o7 w5 G) _' E .name = "user_led1",
1 u% H" C* b; J* r- [' R6 B .default_trigger = "default-on",
3 x5 J+ g+ B, f7 }+ F },9 a6 T; P- F( s. D- f
{
/ R$ {. |$ h, | .active_low = 0,, j$ L, e1 {' \- x# X! X5 ?
.gpio = DA850_USER_LED2,9 X# X% l1 P4 w
.name = "user_led2",
' ^4 V, e* b2 @ u& n, ^ .default_trigger = "default-on",
" E/ }0 p; I' g5 \3 p },/ \. }2 D* e0 C/ X1 A
{7 e4 a3 k# v% }1 i
.active_low = 0,) r* d: Q/ Z. T
.gpio = DA850_USER_LED3,
, @1 s i: o: q& S .name = "user_led3",
, {9 d4 l% [! v, Z# F% { x: o .default_trigger = "default-on",
* F6 b f0 ~. G2 o+ ^% S% C },
7 H7 p8 \" q! T};$ F9 p/ t1 Y0 v+ P
* ~2 O$ w B7 c5 h5 h/ i0 w) j, B8 L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! R8 L3 T1 J2 I6 K, r) t8 p .leds = da850_evm_tl_leds,8 D+ b3 `2 \; {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* @7 z- h5 O7 n- k& L};% i1 s5 {9 c/ T+ O- }. i: d
. ]) T. M) o6 |' n" N# X, y: a wstatic void led_dev_release(struct device *dev)+ a) r. I5 a# L
{6 F+ C% i' V5 R$ c& {8 D- U2 k
};4 _% S- K4 a' g- L J9 c
- @7 T1 P/ m- W; S4 b& n
static struct platform_device da850_evm_tl_leds_device = {
( i, Q0 ]2 |0 G) f% g4 N% p .name = "leds-gpio",' `' K# j6 B7 T* V& u7 V0 A
.id = 1,
0 }/ U; \9 h" g- @, D' Y .dev = {/ b9 B& h$ A4 K6 E- s- Z
.platform_data = &da850_evm_tl_leds_pdata,
( }8 W7 h' o+ h z2 P( T) } .release = led_dev_release,
( @3 e6 D3 J8 I9 a: r6 d: O }
* ^% D) z/ n1 T! s( [/ q, o};
) R# S& } P+ m( Z4 |- H2 I: s( G% X0 Y' s
static int __init led_platform_init(void)
, j7 n8 u- ]+ L- ?{
+ _5 I: I3 A3 F4 m" U* h# F int ret;
2 u0 E/ R1 _ L8 ^#if 0
/ \/ N: Y, o: J3 y6 K3 U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! o7 L/ N' r* j/ i# J if (ret)
2 y {) _3 P2 W* X pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ T' e6 I7 h) q% ^
"%d\n", ret);
8 G& I, a% b. o0 X#endif9 X+ i* D& Q( H* q$ F' ]
ret = platform_device_register(&da850_evm_tl_leds_device);
6 g6 o; W9 r' K% v6 {; | if (ret)
2 _ d: K+ O3 G, w; K# l pr_warning("Could not register som GPIO expander LEDS");
, f3 I8 X$ z! n0 w else
/ T8 u$ c+ i: M: f+ T printk(KERN_INFO "LED register sucessful!\n");1 w% q. ^2 G" ~0 V$ E0 o0 v
' n+ z% Z9 f9 G. s5 D" v
return ret;
( u0 X% \- V- c- D: h/ E}
2 _1 P; {3 O& \# F4 ?& D2 }0 X$ J/ d0 X* l* ]+ }! O
static void __exit led_platform_exit(void)
1 ^8 }4 N- M% ?1 v{
. B- D- N4 @! O$ q! v# I- y platform_device_unregister(&da850_evm_tl_leds_device);
0 @7 r/ m; l1 r- t
y b" Q) a: @1 T: K) D4 m+ @ A) k printk(KERN_INFO "LED unregister!\n");; ~# @) a- A& I/ j1 |( Q
}
, a: Y! h' N3 a- o0 t0 K% H/ s! }, z- F( T Z, i
module_init(led_platform_init);$ f1 `3 L9 P+ n. B G
module_exit(led_platform_exit);/ r, w a& d" O9 x9 l. N. Q
, v: l {$ |# i; E) t" Q
MODULE_DESCRIPTION("Led platform driver");3 M8 K2 z2 @# D# r/ _* f! m
MODULE_AUTHOR("Tronlong");% w* e3 R- K' _6 C2 j4 g. V- C
MODULE_LICENSE("GPL");
) s) A/ X. R2 t
! l! \/ g' T- b) B9 C. v |
|