|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( a5 C0 ~1 @' i1 M
#include <linux/init.h>
* _# g6 z8 b0 N0 _; e& [3 b#include <linux/module.h>& [8 n: `: Q) c" e3 w) e
#include <linux/kernel.h>
6 h3 e! \% X1 U, O) q#include <linux/types.h>- N3 s$ M4 W. x( u4 P4 k b6 G1 N
#include <linux/gpio.h>/ M# b# k3 g; ~. Y
#include <linux/leds.h>
) F5 M: E" J1 A! D( Z& @# Y; R#include <linux/platform_device.h>$ T- t: R% M: q8 y
C$ I/ o" J( k; `( o, n! C#include <asm/mach-types.h>
- l& Z3 z& w4 ]. {0 x$ S" E+ [#include <asm/mach/arch.h>+ j5 a% P" ^# }9 V! U4 s
#include <mach/da8xx.h>
" X, \" d7 U( V0 q4 T5 ~#include <mach/mux.h>
8 m# g; }3 J/ C2 X6 C9 \. @* A. L: _+ G. r( X0 S# }
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' K* p" Y2 [0 ]$ Z2 o4 [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ a$ T) }% `/ E7 @1 T6 C6 v2 X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% E5 @2 v, v( }- ]' j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( \0 h6 j# ?4 C/ f* G- Y( K5 C
* Q3 S) F! T7 N8 k/* assign the tl som board LED-GPIOs*/
8 [! R& ?4 v- mstatic const short da850_evm_tl_user_led_pins[] = {
7 r9 n+ A+ R7 \, p /* These pins are definition at <mach/mux.h> file */
2 X8 z' U/ p5 d/ Q. Y, c! B, r8 T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. O1 `% \* X" s M
-1
4 I- F- C X3 Q# K};1 Z/ t) J7 h$ }( @( D% s9 I! G
2 [4 g; b; }+ f
static struct gpio_led da850_evm_tl_leds[] = {# v# \4 k5 O$ _, V. z6 ]
{
$ B& x1 g+ P5 ?5 l .active_low = 0,; F- a! b# s7 s: O9 c5 ~
.gpio = DA850_USER_LED0,5 b ~) X% P) O" s Z
.name = "user_led0",4 B) m( t' ~! N2 g& `% p
.default_trigger = "default-on",! J" L0 [9 T! M+ N; c! i
},2 W: Q+ T' H( W( V
{
& L; [+ L7 C! x' p% r .active_low = 0,
; T6 s5 r' E& w: }; f .gpio = DA850_USER_LED1,
( F* X0 [- `3 ]+ [ .name = "user_led1",
9 I3 b) _* g/ Z$ T% W! b$ H9 R k .default_trigger = "default-on",
# Y3 A; _! ]$ M, Z3 o },
! f! n3 r9 p7 P) ? {# J3 k D% q9 f+ B. R
.active_low = 0,
k, ]6 a- z' N$ `. @4 B, ]) f/ y: U. G .gpio = DA850_USER_LED2,
, H5 ]! m% ^' X/ f7 L$ V .name = "user_led2",
3 k m& j6 ?& A m .default_trigger = "default-on",' [# g) W# W4 w; b/ e$ w# U
},; } O1 L: [8 k" w7 c! L* ^. k
{ \9 o# }& c& G9 F) a; \4 y
.active_low = 0,
& z7 P. [/ z! L, f3 c2 ` .gpio = DA850_USER_LED3,0 `7 m {* }5 P" k) F1 h4 S
.name = "user_led3",6 q5 M2 M5 \ ^1 Z( ]2 }" Q
.default_trigger = "default-on",9 a2 c/ j- [8 E z/ i0 P) w4 `" @, d
},1 l& v3 c, n9 |: p
};
# g3 u5 x* v3 C; L1 i( a; a' L2 \% {+ t: H$ j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 u- F& z* H2 v* X% Q# m .leds = da850_evm_tl_leds,
K2 D5 T$ |' C6 P8 b6 D2 k. V# s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# t' \4 y# g- x
};) G. C( w2 l+ y. p8 K" _$ z$ k; T
) O2 |0 x( `) _, n' istatic void led_dev_release(struct device *dev)3 y/ l1 _. {" |
{
5 o) ?; D+ L5 ?0 }, m6 E) N};/ J% r2 D( n2 a6 c$ K* V
% {$ |: v$ G% G9 q' T4 A
static struct platform_device da850_evm_tl_leds_device = {
- ?9 G, ^) S6 A; | V8 l! c .name = "leds-gpio",
% u3 i9 y# `' e# _! A n) H: [ .id = 1,$ T# a* K: e6 }4 s! r
.dev = {
- b' y! ?2 i) I( S; i% e; V .platform_data = &da850_evm_tl_leds_pdata,& ~7 E# @9 z1 ]& X5 W* x% l# G
.release = led_dev_release,. }# T$ e5 r* _2 `; u# m
}& l, [5 a* @# i2 R
};
- d6 w# v# H3 S, t! }& {" V4 n/ t- W
static int __init led_platform_init(void)9 H9 r X" j N3 Y8 W+ j- q
{
8 i9 ]5 [$ |' R, t3 G5 } int ret;
, ]1 H9 }3 g3 r. j% h, @: K, H#if 06 M6 p' v) N2 p- [% \5 {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 [& _; w1 F6 j+ I# ~+ t# P7 ?! |& u
if (ret)2 `4 v. q$ x9 T' S* |* i3 J
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": M! V+ R' h9 M# k0 a
"%d\n", ret);
) |+ H) S/ B% A4 S- B0 }! ?0 C3 h#endif
! r+ z; @% L. G/ d- Z0 i5 i4 A E9 A ret = platform_device_register(&da850_evm_tl_leds_device);- g' l% [; F9 ?* y
if (ret)
3 ]" X+ G5 { x( S6 Q# @$ A pr_warning("Could not register som GPIO expander LEDS");
% ~0 {6 Y0 ?2 {7 @0 F else
; L1 q U, f- x3 i. a K printk(KERN_INFO "LED register sucessful!\n");
0 B8 S8 I3 G8 [5 S5 j
* k0 E9 H. `0 i" P" o7 e' e3 z7 i return ret;# ^6 o/ \" C5 g: q
}. D: O5 L' `3 [; h1 r7 {
V) D3 e% j" u8 z' Estatic void __exit led_platform_exit(void)
2 C( d+ O' Z( u! P) x8 s{. w* p) t1 X( c. I. H @7 F
platform_device_unregister(&da850_evm_tl_leds_device);9 K# x& g1 i# I a
. F. l0 M! O" v4 o4 b, w% V
printk(KERN_INFO "LED unregister!\n");
: c- [9 r. P1 F# w. |5 D}
; v! N. @: m, ]$ K# B; r) |
- Z5 X) v: R" {4 |module_init(led_platform_init);
% }) T& c! a. r/ o( \7 Lmodule_exit(led_platform_exit);6 m1 @4 |- Y. q- T- z
/ Z% v5 l9 \! D& X/ WMODULE_DESCRIPTION("Led platform driver");
& X7 Q+ v: o, `2 X# {& iMODULE_AUTHOR("Tronlong");
" f* S* G* e& c$ T/ ^5 FMODULE_LICENSE("GPL");* ?/ J' t" g$ S# I
% i, f( J; ]3 G/ X& }
|
|