|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 G1 P2 G1 I h) ~2 T8 q. q) c, v#include <linux/init.h>
) G6 C8 A$ R& }, V#include <linux/module.h>2 Y. f }) j; b+ M4 s1 T, l2 e; d
#include <linux/kernel.h>8 r4 X! g( B. w6 F' g1 R
#include <linux/types.h>
4 c: c9 e( r0 s/ X: E, ?/ ]$ Y#include <linux/gpio.h>2 C; M( ~1 B* y4 G. c: }
#include <linux/leds.h>7 e O" s' `. @4 m# i
#include <linux/platform_device.h>6 U* y9 O' c; E$ _0 ^- t( b
9 `* Y) Q1 a6 \( j; C w
#include <asm/mach-types.h>% [2 m* ]4 V( I. |( T6 M1 I/ i( F5 f
#include <asm/mach/arch.h>2 U+ C" ]" H9 ?3 T9 o, ?7 F# ^8 t
#include <mach/da8xx.h>
7 j; x& ?: m! l0 Y: \. ~, W& ~" b#include <mach/mux.h>
0 a P4 O( l# D+ [5 m9 V( M
! W" c: [' s& L2 y( J' o7 A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
m0 x9 _ _( {+ a0 Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& E* G8 {, S4 I! ], e4 {0 P4 M/ g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), K$ O. y2 T" X" R5 ~8 x. O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& k, a9 L1 U) |3 ~$ e+ e7 ^
. z+ b i% Z/ E4 J8 G/* assign the tl som board LED-GPIOs*/
+ j8 F4 n7 P# P- U, t5 N4 jstatic const short da850_evm_tl_user_led_pins[] = {
, G4 e- _) J$ R /* These pins are definition at <mach/mux.h> file */' u& ?) z- i# E* {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ }, Y2 P3 i7 }1 k3 V' c. T$ i -1) f/ X' k8 C; j# E2 k, L
}; p. a& d- n4 t" q: C
0 y! H0 C( M. a2 O1 Estatic struct gpio_led da850_evm_tl_leds[] = {9 N, A+ n. S0 S- B5 y) B: Y" d
{3 `% G, Y: o9 m+ E7 Y& C! B
.active_low = 0," M9 p2 l' a8 @: u' V
.gpio = DA850_USER_LED0,
0 P8 T b" s1 l2 C! \# o1 |/ H .name = "user_led0",
& m1 i$ H/ _2 |) F" b1 S0 n. x .default_trigger = "default-on",0 E; K$ n. ?5 \) Y9 r
},: R; m& Y! O9 r) j8 n: z# g
{" ]2 }! _' ]& x* |/ x
.active_low = 0,
# g$ `, p4 b, c) ~. S .gpio = DA850_USER_LED1,
7 Y( f1 _. l8 E .name = "user_led1",0 j$ G$ d: ~: A+ b; @
.default_trigger = "default-on",
+ S8 p6 }6 L* H2 J2 p },
- j( {" M3 y8 Z, `* ~) c1 y {
8 @6 y0 J. l x# {, G .active_low = 0,
! v9 ?/ y+ K0 M* l# M0 E .gpio = DA850_USER_LED2,, T; B+ j$ P T9 _
.name = "user_led2",% U1 G; c. y2 l- C/ c
.default_trigger = "default-on",
+ Y& B5 ]" I+ a( S+ D; j },# i% _3 Q5 [9 Y5 T s6 x
{
3 @: N' Y! [- s1 G, t$ S .active_low = 0,
/ P/ c7 x. K* d' V: j .gpio = DA850_USER_LED3,
6 I. T d& b5 ~! h% A .name = "user_led3",9 y+ Q, k8 ]# @0 N3 ?' H. f
.default_trigger = "default-on",
& i0 E. R8 |+ U& Z' L$ V, M" M },1 |, K/ p3 \! [/ \. s2 g
};
, L8 t7 p, a: P1 X0 }6 O% \5 J; \4 p; d5 J: z! M2 g' n6 ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( V I" s4 b7 {2 a6 Z$ G1 I1 e
.leds = da850_evm_tl_leds,
: } B$ Q8 A5 _) W/ k6 c. P# ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ C1 F+ [1 Z+ P+ W ]0 r
};! Y( k; _& a! c7 T" ^
$ H1 V! o, [$ o% a5 y0 Z0 b2 z
static void led_dev_release(struct device *dev)
/ W5 f( f: U* L# }& O$ V" q{
- }8 B7 e, |, n* \9 `7 U1 h A3 s};$ H' B& b6 `8 ~0 O
) D8 f* R6 s; N, y: i0 O8 M
static struct platform_device da850_evm_tl_leds_device = {
& D( v3 r" Q) g" h7 e2 Y% }$ @ .name = "leds-gpio",
0 l! J- y; A7 {: ?, [+ Y8 D .id = 1," d0 p0 B Z* a- m: W+ E
.dev = {' R) k$ A) ?( O" h; H. t; C1 |3 G/ O
.platform_data = &da850_evm_tl_leds_pdata,1 a! y$ Y: U% X: F4 w& q
.release = led_dev_release,: J8 ?% Q" q+ P9 V' P
}
) D* q/ O# R, N9 z5 M3 \) p1 v- r6 `};
$ ~* x) `' k$ P v' w- \0 S$ N( b. ]% r" r, B( a# ?4 [
static int __init led_platform_init(void)" u3 v1 @- ^0 z# Z$ R* Q7 v
{
9 y' e' i2 E* U: E: q T) R int ret;1 Z4 ` u# [: q
#if 0/ u" g% V5 w. b* Z& e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- G& K- ~/ I* x9 }0 w if (ret)
3 A$ m2 Z; R/ J/ U, g2 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 _% B# t( J: |4 [( w
"%d\n", ret);
. Q8 Z" C) U" C#endif" ^# I( U. g) q3 t
ret = platform_device_register(&da850_evm_tl_leds_device);! W/ [7 Y0 Y3 A5 g% F
if (ret)
/ N: t5 e. x0 Z' l) u4 ^ pr_warning("Could not register som GPIO expander LEDS");
1 {: n, L y7 C else' c: R5 n- ^3 B4 [
printk(KERN_INFO "LED register sucessful!\n");
! y# ?, z: F d+ g8 J% \( `+ B
4 G7 T0 ^5 w: T' g S* @7 { return ret;
; F( N, P+ k8 U% \8 u}% h& q, x4 h. A1 g5 {) E7 Y+ Y6 l
: H6 \2 z/ Z) [static void __exit led_platform_exit(void)3 a* U! }& T* c( F$ M
{
- h3 \" ]3 `! e, n8 N platform_device_unregister(&da850_evm_tl_leds_device);
9 `5 J, K! T/ ~) R: n8 @9 R
" {+ G `7 D2 p printk(KERN_INFO "LED unregister!\n");
0 \/ U( K% i6 [, c2 R}: f- d4 k3 J3 a1 p( D2 d+ I* ^3 \
, f3 e8 ?5 v* Q+ nmodule_init(led_platform_init);
/ i2 m' e0 z$ Smodule_exit(led_platform_exit);5 i. [+ s/ X' j- X8 `" P
1 T4 N( Q: q4 a/ H" L1 AMODULE_DESCRIPTION("Led platform driver");
; L; J7 M" Z: T' Y' w' KMODULE_AUTHOR("Tronlong");
& y1 p2 R0 A6 S$ YMODULE_LICENSE("GPL");
9 h( s3 E" ~% P$ q9 Z* C7 ~* @# k0 p' n
|
|