|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ ?7 Z! K9 ?* c! b5 b9 X! M
#include <linux/init.h>
; I! G. S0 d. y: E# K/ B#include <linux/module.h>
6 C, O+ [5 N! y0 R5 h#include <linux/kernel.h>
$ F+ ?; _9 u4 ?& r+ ?#include <linux/types.h>! ?0 |% \$ [, O4 m% N- H2 }- E
#include <linux/gpio.h>( x/ J* Z9 F; x) ~1 \" n
#include <linux/leds.h>
2 z! _) c H) \7 W% G#include <linux/platform_device.h>1 O# i" K& F+ E- ~% }
8 z- k* I. g9 {& |
#include <asm/mach-types.h>$ G! a. ?" F% f4 g
#include <asm/mach/arch.h> M+ o+ `% Q( }+ B$ n
#include <mach/da8xx.h>
4 [/ D5 P& u; R" R3 [6 A- I: a9 s#include <mach/mux.h>% a, t* G6 n# h6 @) G
# E9 F# X% Q, H/ u3 }- {, h, S4 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! E+ U+ R. A% W* k0 z0 p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) G) B' G' D H/ }& n: f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 Z6 J( |) J; v k: H+ p! Y' @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* X$ w" ?! }/ g8 X3 }. [! P* P8 [$ J8 W* ^
/* assign the tl som board LED-GPIOs*/9 e6 Y4 [1 }& F( M' P. B' J+ R0 P
static const short da850_evm_tl_user_led_pins[] = {
* \, [2 `& [* W7 [/ N5 f /* These pins are definition at <mach/mux.h> file */
9 h8 ]7 J" S; H( L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* y6 c- I( |# W/ [/ N
-1
# u+ b% N3 L4 Z: C};
0 P; t7 f/ `3 q' H/ t$ G
! b4 i! Z) w/ cstatic struct gpio_led da850_evm_tl_leds[] = {) F1 ^; q+ Z* W2 Z) u
{
$ {1 b! w2 X, u1 F* | .active_low = 0,
* r& T, F# O# a- P+ Z .gpio = DA850_USER_LED0,( ~; |& ]; |7 B! \
.name = "user_led0",) {: B, ~8 U7 }8 u# Q% h) W
.default_trigger = "default-on",
; Y$ m+ p1 u: F8 h! b },* c4 L! A8 w8 W5 M J+ E6 c
{
- o8 @; J9 B- A$ a4 v+ I .active_low = 0,
* c# g& n- O' u# [7 z$ l .gpio = DA850_USER_LED1,
- o3 l/ W7 Q& ?2 H \ .name = "user_led1",
$ E# Y9 }4 U! Z/ m* @ .default_trigger = "default-on",) I+ W9 k0 L$ }% e1 g7 D/ }
},+ a' Y4 s W( E
{
$ d( X% B2 @( p6 @ .active_low = 0,2 H2 ]. g s- C) o* u1 P
.gpio = DA850_USER_LED2,9 _# M0 T* s2 c! k& Y
.name = "user_led2",. b2 ]) |$ z/ s1 ?8 J& a
.default_trigger = "default-on",
) }; ~' ~3 N$ }8 V },! |; z }/ R6 M8 K3 H( T2 @" x
{8 Y+ o1 P/ s8 M( G1 m
.active_low = 0,
! D! n0 j( O3 q/ T .gpio = DA850_USER_LED3,6 c7 \+ [2 H9 ]
.name = "user_led3",- Q+ L6 [: s; Y9 q" A: A
.default_trigger = "default-on",) K0 {& k" [; y, g( W; b
},
' K2 p! |8 z! r* C; ^};
) a6 I- B% e; F* ]0 x6 ~- w9 R- v+ v8 [+ e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 C% A5 g2 a2 Y& Q& S .leds = da850_evm_tl_leds,
- Z7 r( G; w0 {' K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- a' V7 S3 l5 k
};
: w! r+ ]/ [! k$ n6 }; }! Z+ T. m& m) e+ V) z, S8 k7 `" n. o
static void led_dev_release(struct device *dev)8 A; G7 Q D4 W6 Y7 m0 @2 i' p
{
$ |' I$ p: o% n0 H" y; X};+ u9 n' L G8 l1 u, ^% v7 s
0 [- _# A: ~8 e/ ~8 i: [2 Hstatic struct platform_device da850_evm_tl_leds_device = {
, M6 S* I$ M; u) r0 |4 C .name = "leds-gpio",
6 v4 Y) t! g3 k: W .id = 1,, u& p [4 K! p
.dev = {
% G& t8 D5 V7 A! D! o; D% S2 }: H .platform_data = &da850_evm_tl_leds_pdata,
7 h2 Y! A) _6 q) [5 \ .release = led_dev_release,% v# F* [( R# [0 l
}
& g# B2 Y- h/ ]5 r};; \* C8 E7 P% d
+ {( o0 u5 o3 z1 C r) ]# V
static int __init led_platform_init(void)
$ ?; v# \1 Z3 u( q8 `{* v& M; ~% X) j ^' \/ E4 y
int ret;
; O# T0 K% F3 z/ t- I+ m. s#if 0
" d+ a% R, M: J& B; P; R% @6 Q9 a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* r9 @2 ]- H# U7 S8 I if (ret): Q" z+ m* x" @; `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* n8 w6 u+ A* V "%d\n", ret);, j$ k1 @8 f1 ?
#endif
- r! Y: k4 c& G7 \ ret = platform_device_register(&da850_evm_tl_leds_device);# {0 M) E$ b( |; x: |
if (ret)
/ P! q3 ? Y, c9 h n% @ pr_warning("Could not register som GPIO expander LEDS");' u' J( {- x4 J( F7 }
else9 \1 x3 L3 G8 q3 `- R. [4 c$ d
printk(KERN_INFO "LED register sucessful!\n");
& f0 O; B- ]# z, |* D& p
' g. ?1 X5 ~ y3 V return ret;
- D b( ]) J# `% w) @2 h! Z9 }}9 p6 _" I9 n3 {5 H* y5 h
7 q' H- W* i/ v5 A' ^3 k+ ?) p& q
static void __exit led_platform_exit(void)7 [# f' Z* p& s" b% d w; `
{
2 N; R; H! O$ A# g% }# x* X platform_device_unregister(&da850_evm_tl_leds_device);
" L( v' y X2 O2 @# D* G, U" J* I# P: M: z6 m9 z
printk(KERN_INFO "LED unregister!\n");
8 x. P) |+ ^+ i9 G: K3 p}8 g( L2 h" d. ?$ D+ A1 q+ z* x2 N
8 O2 ^4 S5 M& b, r6 K
module_init(led_platform_init);3 N* D) `; c2 R' M+ S' j! P- X+ L
module_exit(led_platform_exit);' _4 ?5 K" w; D
. ?; H$ P# T3 t: iMODULE_DESCRIPTION("Led platform driver");; w! O, ^; g+ Y6 z
MODULE_AUTHOR("Tronlong");7 p( Z _+ ~6 z, P* T5 N4 w# Z
MODULE_LICENSE("GPL");
1 ~- K2 P5 C5 D6 N' ?9 e/ G K" A& X/ U0 z; R
|
|