|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* \1 \4 {3 N. J; [- [# E#include <linux/init.h>% I& H R- y5 ?, z( B
#include <linux/module.h>
$ F4 v, ~+ M u: Q#include <linux/kernel.h>" x6 y3 U+ W5 v/ A. F/ q
#include <linux/types.h>
4 V$ v& z. \& j) } u7 e#include <linux/gpio.h>
$ v, o5 h9 |6 R#include <linux/leds.h>
' j/ s/ ^" ^- o3 J1 j% x. V. H$ C#include <linux/platform_device.h>% D7 {- n9 i! K
/ l1 L* F1 t" V$ d#include <asm/mach-types.h>
|5 ?6 S+ N/ k$ M#include <asm/mach/arch.h>/ p) W/ a* N2 m0 F# |$ L' u# n
#include <mach/da8xx.h>
$ Q T/ d! C9 _" Y j4 ?#include <mach/mux.h>' V/ D Q7 W: M3 W# W
& s$ U9 V7 W( N# u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! z) B, A' r! F* ]: H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ p/ X) v# v: m/ W- D$ `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ l6 V/ k0 L" ~. l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 r9 G; I; t, }0 r0 E R
8 @1 _; U/ @+ `1 Z) i: h/* assign the tl som board LED-GPIOs*/8 n! e. H3 e( R! ?% O$ `
static const short da850_evm_tl_user_led_pins[] = {5 S; V3 r, \; L& c- ~) E+ e
/* These pins are definition at <mach/mux.h> file */
* d- R, O, O! P, [; k8 i# J: u7 s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 _9 a# n8 C; k+ J& ]' M R -1
+ R/ L3 g, V/ y" U+ F& q};
% Z7 @( Y' o' w+ O0 e/ z k4 O* z7 ]4 K: a2 O
static struct gpio_led da850_evm_tl_leds[] = {5 P4 r* R- u' y
{- _6 @( @) H( n
.active_low = 0,
& j4 G, e0 x1 p& } .gpio = DA850_USER_LED0,
' Y# E4 ^( {8 q; v ?6 x3 f6 u .name = "user_led0",
7 V- ~# _* z* u; R: Y9 b .default_trigger = "default-on",# }2 w* R: d: R) b2 c9 ^; M/ Z
},
p( k( O3 B& f7 m8 F {! p9 }* [: A0 Q" J" E/ r# Z
.active_low = 0,% ]7 W& X+ B/ U" P1 l% X1 }
.gpio = DA850_USER_LED1,
' O! X' w4 h1 N .name = "user_led1",$ W$ U- y7 Q" \- I) h7 a, O
.default_trigger = "default-on",7 v( U v, c2 Z- W5 H
},9 H, H1 P8 q/ I8 F+ m! i& z
{
5 k6 `2 q# @! | C+ G$ u .active_low = 0,' w0 `. k) n" Y
.gpio = DA850_USER_LED2,
$ P" |+ A$ q y% d4 A. w .name = "user_led2",
5 O2 c3 s% E+ d6 |1 c ^ .default_trigger = "default-on", w- {* U1 d: b. b/ X( e
},: d3 S; L' j; u# z. l# N
{
$ H% m& j- I. K& ~+ j0 C$ t$ n1 X3 _ .active_low = 0," n$ J6 T: F" B
.gpio = DA850_USER_LED3,
3 M+ W) f3 A+ z ^$ Q .name = "user_led3",
3 P d2 N/ Q( y7 }2 e .default_trigger = "default-on",
8 y: r; p9 |' {( m# Z. _0 v },
+ u5 y, g( Z, B$ A5 N" U};3 r, }/ y% F1 _2 g( z9 ?
: P( s4 h' G N0 x0 `3 ~2 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& ^& m2 o+ F5 E- ?7 h- J7 z) I
.leds = da850_evm_tl_leds,
) i/ N, G' K. P. I1 Q2 a .num_leds = ARRAY_SIZE(da850_evm_tl_leds), w$ q x; `& c$ G# d. [
};
" Z2 q r* ?0 m' T9 I& ^! Y# Q, e& g/ z/ a* j2 E1 n6 W) V3 Z
static void led_dev_release(struct device *dev)
5 Y& H& ~4 J0 v{5 ?/ ^4 S1 E7 U M" q) h8 w
};
* R( o# s& W9 {0 q/ G
2 H; b' a6 V' ]+ }" |0 q4 Ostatic struct platform_device da850_evm_tl_leds_device = {
+ e& R4 s! Q1 G1 N) w .name = "leds-gpio",
2 j/ ?/ A: M+ |+ E9 N/ L .id = 1,
! C: z% K h: h6 }' ~* y .dev = {
/ W, L) l l- { .platform_data = &da850_evm_tl_leds_pdata,
' d+ p+ m/ f( M f; H .release = led_dev_release,
8 x) {, {4 t, ?: H6 Y0 P) h }
# j, D( I# j w- X7 H4 }};# u4 p$ ]% s, w$ D J
* b9 M3 c9 b. G( ]2 O% ^static int __init led_platform_init(void)
: H/ K! t( }9 @! {6 t{
: y3 `7 L+ ^# \ int ret;5 B3 \$ H6 q& O% `: r" i B. v
#if 0
3 s/ X# |! l4 X, W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ [3 f* `( N: r: K7 u( e+ H if (ret)
' e* F* t9 ^4 x$ R+ j1 g; a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' \- ^$ K5 @% T" {- ? "%d\n", ret);
- I" Q- l5 u+ E& X1 |#endif
/ p8 n9 u- W" z ret = platform_device_register(&da850_evm_tl_leds_device);
% J, l- p6 I. I( p if (ret)
z) j5 |7 s/ i3 h9 i2 o6 C) c pr_warning("Could not register som GPIO expander LEDS");/ d' [1 Q6 P* Q4 V9 k' b' e
else- F4 t, U$ a. H. q, J
printk(KERN_INFO "LED register sucessful!\n");
" e- Y1 H- u) ~& b1 U3 x, n/ J6 h6 m. u0 `9 m w
return ret;
/ T: q: n, p7 O' }4 n}
( V9 {. ?3 b1 z/ d7 z/ u
) V, z2 l1 R# ]static void __exit led_platform_exit(void)% ~* n* `$ |5 {( _' j; Z: u3 ^
{
+ g B9 Z0 p2 |& ~# t$ ]0 O platform_device_unregister(&da850_evm_tl_leds_device);
1 n7 }/ M3 v \
" R- Y: B% \- Y k" U# U4 Q printk(KERN_INFO "LED unregister!\n");
) t. @4 ~( t: k9 r+ t}! v+ ?$ O0 s# V& `* t1 F7 z, a
! X4 J( _* J7 H
module_init(led_platform_init);
) |) F# H( E) M" F+ W# w! Umodule_exit(led_platform_exit); m& L, Z( z+ `, P
6 r/ b4 F/ B+ `) _
MODULE_DESCRIPTION("Led platform driver");
* K8 j% ^# H3 R! L' |MODULE_AUTHOR("Tronlong");+ Y6 y7 g% n0 T# H! z f9 O+ y, G
MODULE_LICENSE("GPL");2 t( u8 {# p8 c2 v% ~& u5 x
! v; k6 j$ o' ]! W
|
|