|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. C$ Y0 O9 c# R* r#include <linux/init.h>
* {4 x T5 o" l B' S& J#include <linux/module.h>% v4 I' K5 R/ `7 u0 Q
#include <linux/kernel.h>
1 U9 e! L0 S$ N: T+ n7 m# _#include <linux/types.h>
9 p) v) E. l4 _ Z; ]5 w#include <linux/gpio.h>
+ }) n- ^0 ~7 J2 F/ k4 i( k8 E#include <linux/leds.h>
% d5 ~5 J4 S. C$ H3 G#include <linux/platform_device.h>
8 d4 \' ~2 _4 y4 [
. X a7 a, x3 u8 d& o7 {#include <asm/mach-types.h>
8 }6 _/ ^- w) Y$ R#include <asm/mach/arch.h>3 Q+ z2 t, P) u. g
#include <mach/da8xx.h>
[' p' F3 b. B u- m3 P- B#include <mach/mux.h>) R+ k& \: x+ }2 s
6 w9 `# k1 n6 X$ a; [* C+ |, T9 k4 k
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& x: b* V( p# z% G/ R" d+ Z6 q- y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! j: h* h) A* \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 c( J9 f( Z( j- b/ Q" X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 f: H* p/ u6 W5 L4 M$ _$ @
: F: e+ y7 q5 T; L2 Y4 [* l/* assign the tl som board LED-GPIOs*/
' u% f) ]; W! N) _& R% ]0 N- Cstatic const short da850_evm_tl_user_led_pins[] = {
# L5 w9 [; ]' Y; h /* These pins are definition at <mach/mux.h> file */: v! C+ I$ L, ~9 F% X: K
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: q" h- o( ?3 J8 _. @% V$ L -1
0 J6 |! {3 J% y2 s9 z# M};2 X0 B; k7 ~* H8 c! l: M( B
. e$ s6 ]4 D( F+ A! D& |! S
static struct gpio_led da850_evm_tl_leds[] = {' R# d' _- J9 v9 O! a) k+ k8 t* P
{
8 U; F* Z5 {" c" `9 v. ~ .active_low = 0,
9 H5 h3 m0 o4 C% C" g2 q .gpio = DA850_USER_LED0,% Z( A0 A: k6 Y1 D) s; j3 h$ N, {1 M# v/ s
.name = "user_led0",
; ?2 p' @2 R0 l( n .default_trigger = "default-on",
" k; f8 R# V, r! q0 @7 U }," d$ e4 x) U) b7 D5 f) J* o6 D: N
{: I& k) k P: Z
.active_low = 0," [7 K. x3 N8 `0 o6 l9 F
.gpio = DA850_USER_LED1,
3 k; z. f3 v( [5 X5 I/ D .name = "user_led1",
0 _; i' w6 Q# ~# | .default_trigger = "default-on",. D9 d8 k& _8 P Q
},; O/ O$ t- I5 W: V9 w" Y$ d6 I
{# x2 H; G& p! L- l) J. z c
.active_low = 0,$ p% x0 P1 F; P6 `7 F) s5 o
.gpio = DA850_USER_LED2,
: [6 [ q. P: M- g2 _+ U- W8 a .name = "user_led2",
/ x8 i+ I- z* U4 z. v .default_trigger = "default-on",$ `! B/ `) l7 r3 A1 Y
},
3 \- [7 P0 m: ^/ _" a A {
2 b% F) m0 c0 i: ~ .active_low = 0,
5 Y I' N% v0 o7 A" R# s .gpio = DA850_USER_LED3,* ~- M+ ], K' k9 ]& c
.name = "user_led3",
. ^3 p Z- W/ J, F) @) g .default_trigger = "default-on",8 i L: L- E, v/ b; t7 I
},
* n* y. i% F u};* x2 ]1 I3 b( p6 b
- n" g" ?/ U [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: H9 L' D& ~9 p. A( x .leds = da850_evm_tl_leds,
# W5 |; A2 Z1 ?7 w3 H1 b! r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 t3 d+ u& \9 }: g
};- f! i# y; g# m
, _7 S0 ?/ s9 w1 i7 J& b- }
static void led_dev_release(struct device *dev)
`4 F; G+ N+ C L{
# h1 }1 W5 { a% S x, x! `& Z};( w4 {" v8 g: h) D
7 l: z. | J6 F- |. a% y
static struct platform_device da850_evm_tl_leds_device = {- ]9 f' r$ y$ W) y% @
.name = "leds-gpio",+ B m; R6 |8 z3 p) \ ~- Z# [
.id = 1,) w0 R* O) |1 ~
.dev = {1 u4 q& @4 `% s4 A0 `0 d2 U+ I0 @3 N
.platform_data = &da850_evm_tl_leds_pdata,
1 K: L1 E& ]# k+ z .release = led_dev_release,
2 C9 q4 Q" w! O- m' k) ] }
& {# P: W" t& L M# V7 d# f/ {! N};
! |/ W& r+ S$ b- z9 v% d- t! u/ A% n# `2 k
static int __init led_platform_init(void); Y" O4 Z- g$ O; ~
{
8 J# \# Z( v) |1 C int ret;
' U2 e+ R; p: k: i: E0 k! V#if 0* G4 W- G- Z6 d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& m( B7 f- t4 j! I
if (ret)3 D1 H0 T9 A6 X. \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". Q4 Z& a1 F/ ?5 i3 D, e! g
"%d\n", ret);
# }5 k4 I Q- v) K7 E! y#endif
7 h D' `1 h/ l y. H3 ^- i) l ret = platform_device_register(&da850_evm_tl_leds_device);6 J$ k2 o& h# r
if (ret)
' n2 ]/ L$ w; {* |3 ~% b pr_warning("Could not register som GPIO expander LEDS");
4 d, z1 t8 ~7 z* { else2 N' ^$ N, k$ d) W8 \/ C9 W! p
printk(KERN_INFO "LED register sucessful!\n");
3 I- w9 o+ w( ?3 h* m+ n! c5 r* n+ Q2 y, |- B
return ret;5 E. X7 K. A7 I6 z7 p
}9 V) O% u; q& i) b6 C V
! J2 o6 \) h9 Y0 |8 X* E
static void __exit led_platform_exit(void)( C* o( P) K- H1 W6 A* q
{6 N3 d/ z$ _$ S$ }- t, Q5 N
platform_device_unregister(&da850_evm_tl_leds_device);" _) M" l& X- a# w% ]2 a
/ }2 g" q& L" I! g) d' S printk(KERN_INFO "LED unregister!\n");, F+ A- X7 ^, m$ p
}+ k% ~& [. o* G0 n
& |2 W$ L' i! p' O9 @4 |, A. D+ ^
module_init(led_platform_init);
0 B2 o/ v, T/ e% A( q+ S- Y) @( K( i2 Q4 ymodule_exit(led_platform_exit);9 K7 T0 Z' A& l: O
$ |1 Z+ b; b9 G2 eMODULE_DESCRIPTION("Led platform driver");/ ]3 q6 U# Q1 k! C$ L/ H/ P6 A
MODULE_AUTHOR("Tronlong");
0 D; H& Q: z `MODULE_LICENSE("GPL");
1 a" c% A+ j. S4 Z& T4 O7 u4 v/ j! w; e5 j4 p' o1 f( q
|
|