|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 ]0 Y7 S, c* p, a
#include <linux/init.h>+ s0 h2 C% C! I( h8 b3 H, D
#include <linux/module.h>* k& j' D7 b& M) l) Z
#include <linux/kernel.h>
7 W$ f7 Y" D( D0 c7 U# F& u#include <linux/types.h>3 g2 K( x+ `6 Y$ T3 i4 E2 Y
#include <linux/gpio.h>6 d- V% X) l7 @' X
#include <linux/leds.h>& |2 J; b# p' `6 I* W
#include <linux/platform_device.h>. H8 j+ }6 F7 |5 I4 b( Q
/ W9 R# z* S% d; j
#include <asm/mach-types.h>, }4 n& `- _, W! a6 M) ]6 [
#include <asm/mach/arch.h>
* \/ B4 Q# \, c#include <mach/da8xx.h>
, h) d: ]$ y; P8 P3 h#include <mach/mux.h>9 p5 }' o( l$ Q' C* t
X. M( y% g5 g& ?6 c: [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) z0 K; n; c: i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 x) |( k/ |% `; k$ P( r/ A6 r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 l7 O5 R8 n3 N/ O" A" Y* i- ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ ~. C+ `% f8 v- {/ h" A$ m1 r& _4 _. M9 @7 k
/* assign the tl som board LED-GPIOs*/
+ q3 l& G3 x X" y: ?6 sstatic const short da850_evm_tl_user_led_pins[] = {
+ O- `8 Q& O1 D( m& s/ u /* These pins are definition at <mach/mux.h> file */$ G' l, g- g- |4 f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: G/ U$ t4 A6 v6 o1 L$ j
-1
# V% |' J% ]6 G; r};5 q0 ^# O+ Z1 f6 X; m
( H9 Y. j' g+ q( ~7 a5 f/ c: B" |static struct gpio_led da850_evm_tl_leds[] = {$ k$ P8 B) l9 t% {; [, q6 k
{7 o5 J s2 I& x0 ?
.active_low = 0,. S* a- h) V# w5 u- F
.gpio = DA850_USER_LED0,: ]3 Y) E% E% W" ]% d7 q% D4 A, w g
.name = "user_led0",' y8 G0 P! O; y$ T2 |5 t! a
.default_trigger = "default-on",
1 k) z8 p2 R* p' g' f$ I( l: t },
: K9 ~2 E* K. X3 n {$ M# `% Q( h- w* t8 I
.active_low = 0,( A8 M" l: a5 o2 F7 Q1 Y/ ]6 c# ~
.gpio = DA850_USER_LED1,
' m7 Y/ G- Q6 n$ O! h .name = "user_led1",* r2 S& A* b4 B2 U) |
.default_trigger = "default-on",
' e& a9 h- a" u* f" u5 S2 o" P- y; P },
9 }! z) t; S' G6 V7 v {
; r( m1 U" F) `" i' p5 P+ F: V .active_low = 0,5 O7 s1 S) O$ I1 O9 v/ h
.gpio = DA850_USER_LED2,# ?% J( W6 G( u6 o( }: {/ L
.name = "user_led2",
) v: \2 C$ y; ` .default_trigger = "default-on",
- Q4 {* h4 d T4 S8 l: F: Q/ ?' N },% K9 p2 h% r! |6 T7 w& J7 L5 S% O6 ]
{
[' L' T' P- k/ k .active_low = 0,
9 [5 V% r$ G, W3 G3 t, L' ~ .gpio = DA850_USER_LED3,$ Y4 F1 }0 x6 S4 g' ~7 W+ ?
.name = "user_led3",; f. t g/ l5 E" h0 z) s e
.default_trigger = "default-on",8 ^( h: z0 e# a! b! x
},
; z ^. @( e/ Z' A};
1 L0 W6 C! N3 I' i/ ^; X
" w% c- N) D& I& x; _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& a1 M! _* F1 Q; A; K e! F; W
.leds = da850_evm_tl_leds,( @/ y) d$ p: W$ H5 I9 u' ]) b1 M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ u) l# ~1 e- A, k- {
};1 A& w/ X0 ` |$ R! Y3 a9 v0 b
8 t" O1 C8 u+ n1 x* rstatic void led_dev_release(struct device *dev)
% C: `5 G$ M8 S, G& G4 }+ n{
( g/ ?4 r( l5 X( o6 j0 I3 c};3 `: D. G+ Y& A9 d7 u# @
9 C( ^4 V6 z% Y8 z) l% xstatic struct platform_device da850_evm_tl_leds_device = {
# w, m' `; ^: q& }5 C6 ^ .name = "leds-gpio",8 K1 }# p* h: c# X$ {* u9 x
.id = 1,; C& ^, G0 J" K8 x/ _- `
.dev = {
/ w, j; {$ k) }$ \# ~0 L .platform_data = &da850_evm_tl_leds_pdata,8 g( l0 B) g0 Z, Y$ A8 b
.release = led_dev_release,9 f P# v) e7 M* p
}
& u/ h5 Y4 f0 d& m1 u};
& {% q) _7 e& S4 F! s0 g2 f( X7 G1 \
static int __init led_platform_init(void)
1 i) v" _5 }! g5 z{- t0 f! j$ S! Z% a) O- e! v2 c4 U5 Q
int ret; S7 }# p6 e, g) b7 z$ ~: n# ~# _+ j
#if 0- X9 ~6 m" R9 L$ y# ?' E; N! }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
a) N9 R) l/ q; L( Z4 N3 t) z if (ret)+ s0 ?) P$ ~5 c6 o; K! s0 T* C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 U; i, {4 \+ F$ z; D4 N
"%d\n", ret);- u! W3 ^1 k, b
#endif* m$ T% F1 t; g6 |3 b! Q
ret = platform_device_register(&da850_evm_tl_leds_device);# J/ v6 A: n8 _+ m: n4 E# M
if (ret)
1 V2 Y/ P4 }+ ^; H. Z) n+ E pr_warning("Could not register som GPIO expander LEDS");" r0 x. j5 f X0 n
else- E* x& R# L7 f: F9 k3 r+ _
printk(KERN_INFO "LED register sucessful!\n");; R3 |/ D" R7 ]# G1 b0 \; `' u' K& y
3 ]! A6 Y- J& U
return ret;
0 v7 {. @9 R8 V4 g( u8 s; q% P}" t. |+ l9 A6 ~0 A# Q6 l7 p2 |! y
2 a: U A/ a$ T0 e# E
static void __exit led_platform_exit(void)
) K: v& i( A& |) W' r- G: E{, x$ ` o% f0 x7 i5 _- M0 A9 b
platform_device_unregister(&da850_evm_tl_leds_device); {' F7 K4 p* _# z l
: d9 ?7 W& \3 v9 q2 d
printk(KERN_INFO "LED unregister!\n");' f8 C* L0 Q9 w+ `" G- D
}
8 s' R+ I$ s, s) w' v; x8 @& W P2 M) {* b9 Z' K- ?3 t
module_init(led_platform_init);+ m" {/ _* ^& \, l0 R
module_exit(led_platform_exit);
8 O$ H6 P) P3 z4 @& Q& W3 H6 T
. D, o/ H: i4 r( [! H4 DMODULE_DESCRIPTION("Led platform driver");( p, K: y( @: B0 p$ I
MODULE_AUTHOR("Tronlong");) l& L3 z, [( n. z
MODULE_LICENSE("GPL");3 s+ D: |% [# L& \
h, x" R' K* i$ [2 X
|
|