|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. R" U( P0 c0 a! o% L/ l2 \1 }7 v
#include <linux/init.h>& Q1 z2 P: T! K2 n" m" W% {
#include <linux/module.h>2 F+ y$ f: T# `
#include <linux/kernel.h>
$ h! J/ c( o$ y* a& K/ _( L6 V# y#include <linux/types.h>: }# M) d: }! ^% N6 J2 W
#include <linux/gpio.h>8 P4 H9 H% D: D$ O
#include <linux/leds.h>
. o" C4 C" T- G$ F3 Y#include <linux/platform_device.h>
" J/ _7 m8 Y& l/ H* l" v/ I* Q# j7 X
#include <asm/mach-types.h>
2 p h, Y* ~6 K% g#include <asm/mach/arch.h>- u5 V# f) t$ P, H2 L: I
#include <mach/da8xx.h>5 X6 H `' l$ c" c1 _/ F
#include <mach/mux.h>
6 ?4 ^% S& R- o( I, |4 q1 ^; f7 U$ Z% ?* h% u X- A8 \$ T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 j+ ^3 J" b! ?" A4 _0 n+ U3 i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 K* o; L/ P5 a' f/ w" ?8 A" N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); U& ]8 F* k) u& e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 a. G# f9 E7 @ ?( S
2 E+ U3 N( F. U R0 C, Y
/* assign the tl som board LED-GPIOs*/
7 E% L8 ?2 m! {; e; W( { k* U; b+ Nstatic const short da850_evm_tl_user_led_pins[] = {# l; @# a0 d8 @, E" O' l6 U
/* These pins are definition at <mach/mux.h> file */
6 L2 u! m( l( M# n# q3 X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 _ Q6 r; [# u0 A
-18 s( z9 H) c( O T& W3 ~) o
};
; t+ K/ z w! Y; A7 X8 Q
q; n" h/ G- q) P+ i; ~static struct gpio_led da850_evm_tl_leds[] = {
g8 G3 l7 b7 H0 d; | r {
# e" @/ z8 b2 c( p0 Y5 d- v/ i .active_low = 0,
4 T" W9 q' P" q .gpio = DA850_USER_LED0,5 F5 S) o" t' v
.name = "user_led0",
; G8 m8 ?7 {: _" {; ]( n& w6 q3 q* _ .default_trigger = "default-on",
8 n% v; A; E2 Z9 V3 [. D },. L5 O- a2 o" j
{
; a# u2 W5 E( Z4 |3 z .active_low = 0,
6 t: ~- b! B- p+ ~7 n2 D! Q1 Z .gpio = DA850_USER_LED1,0 E' W s. [0 S4 j4 F
.name = "user_led1",2 N' F) W/ {$ O |- a& Y; F
.default_trigger = "default-on",( r) t9 Q0 C5 s* {7 {
},! Z# N0 T% F5 _
{& ]# I+ J/ M( W* P0 f
.active_low = 0,. k" [3 I; Q1 D% C. F: ^& b; K& g
.gpio = DA850_USER_LED2,
$ g3 ~" q# i, R; u @. \' \5 ~ .name = "user_led2", ]- y/ Z: |9 I
.default_trigger = "default-on",+ [( R5 M. `. V; c4 e- m( G0 @$ X
},5 n5 [6 F* Z1 a1 ?; t5 m
{1 O1 i- T) m; G$ }
.active_low = 0,& c% O+ `: t+ h6 Q: @; g2 d `1 `
.gpio = DA850_USER_LED3,
6 v2 I8 y9 T- Q( M- e# H- D .name = "user_led3",
( B& ?7 Z* ?1 Q3 l7 w" S( g" s .default_trigger = "default-on",
5 z( V% M; h- e6 x },1 x3 c! ~5 G3 ~0 m4 y; p6 B/ p6 Y
};
/ I( [+ }1 C8 ^. `# P& Y/ J
- x" \# @: t$ j# W7 Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ W+ q! [0 @% d& c( L0 U% f
.leds = da850_evm_tl_leds,
8 @. k& [- Z0 ?4 O) w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* X$ k! l4 Q0 a' L' M};& w* y! x, M; f1 m* n
% Q% I* ?+ y2 G+ ?: e g( }static void led_dev_release(struct device *dev)
2 I/ `' j9 O$ H9 n- A/ E1 v, K+ u{
" \% g% P2 ?9 ^% T6 J7 o7 e- \};0 L8 {1 E1 f' } ^8 K% [
, ^, p/ K; U" q) `3 c
static struct platform_device da850_evm_tl_leds_device = {5 D4 \, c0 i T1 M/ [* I+ }
.name = "leds-gpio",4 e/ `' H. ?' d) v5 }
.id = 1,
+ z6 o$ k8 s% [6 E8 X. j8 W .dev = {
/ n/ W t, Q% C5 b3 @0 S c8 O .platform_data = &da850_evm_tl_leds_pdata,, F# L) y. ^( I) q2 x
.release = led_dev_release,/ ?8 b( l- I- M2 o& }8 a( M1 m$ S
}9 a; s# g7 a- v" N- I
};
( Z- N4 D* k* t% e8 w' v2 [
. @8 `8 V V4 B$ M- F, {1 Lstatic int __init led_platform_init(void)1 ~. y& _" M" L! F3 f6 k! ^
{$ Y0 J' s* o9 T( Z& m
int ret;
5 h% y, E& m* z4 G& F#if 05 M6 z: [% `) H3 q( u# @+ s- _
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 d- O' W1 l6 }) d. Y
if (ret)
5 H9 m+ P J0 W! A' G pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 k$ P7 s- x0 p x- p- R
"%d\n", ret);5 H( I: w! p( I' b/ M
#endif5 k1 u' ]0 t1 U8 \# w" O2 Z# z
ret = platform_device_register(&da850_evm_tl_leds_device);. u. y( q |+ Z) W* E7 n
if (ret)* k! {$ {7 @( y/ n
pr_warning("Could not register som GPIO expander LEDS");
0 A1 Z8 `1 n% _- n else1 j9 @7 m* V' z* r# o! k. e
printk(KERN_INFO "LED register sucessful!\n");
0 S& {- R4 y$ M: x# q) p( u3 f! g# K4 a; U/ J3 n4 E p
return ret;
' H! w3 Q8 M" Z6 X% b5 @; w! ]}/ u/ q, @' W' s! c$ A" E$ U& @2 {
- P3 O ^2 a! J
static void __exit led_platform_exit(void)
' t9 b+ h/ _- H9 j{7 K3 V+ W4 n8 z* M5 N: l( j2 d
platform_device_unregister(&da850_evm_tl_leds_device);
! \$ D9 O- ]9 [3 W, E( L! T" x
. Z3 I6 i" r& t4 F printk(KERN_INFO "LED unregister!\n");, ~; k& z4 ]( D1 C5 B! Z9 y5 s
}7 K$ g+ y( W+ N5 J
; ^. }1 J. v7 [; {8 g, c& [
module_init(led_platform_init);9 U6 ]8 j5 f7 q8 d2 ]
module_exit(led_platform_exit);
9 V! @5 E0 p4 d5 H3 c$ k1 J$ I9 t& k
5 K- T- ^' T+ h. H3 f: PMODULE_DESCRIPTION("Led platform driver");. C; e" B: ]' t$ H. d4 A9 r% d
MODULE_AUTHOR("Tronlong");
q- ]2 C/ y* J/ `6 v4 m( J% aMODULE_LICENSE("GPL");+ C, X9 o+ L; @' Y
# o$ }, f0 }7 S
|
|