|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 H" l- U3 d% L6 m+ w( v' Q* C" |4 u1 t
#include <linux/init.h>
2 `- J1 R6 K4 b U: H#include <linux/module.h>! C$ [4 }( X4 K' D
#include <linux/kernel.h>) G+ }/ L/ l: b' W, L; W7 a
#include <linux/types.h>
5 \/ S1 F8 S. _, C#include <linux/gpio.h>4 }' l. {. S! v2 _6 j! ]
#include <linux/leds.h>
& C! U5 M! A, r2 s. j) H#include <linux/platform_device.h>
$ R2 y8 G. W7 {: Q/ Z$ b& Z5 B' M8 `
# w$ Z/ Y+ U/ q6 R+ B# y#include <asm/mach-types.h>
% f. F. S0 E: `3 I+ _& j#include <asm/mach/arch.h>
/ B5 z, s' \" D& J#include <mach/da8xx.h>
& p$ l; S# ~ k8 c7 v- F- w9 y#include <mach/mux.h>
/ i( `1 T- |; ?$ C
% ]( J$ P$ h" ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); o4 B' I8 ~! ^! }( V% @ \: v! X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( L! i# [, }+ L2 c) \, k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( P5 R' z8 d- Y% V% g. b- x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 E. D% e; x9 G8 Z4 f
/ R+ A& W% q( ]5 J7 w/* assign the tl som board LED-GPIOs*/# f" S7 Y( y( z4 S
static const short da850_evm_tl_user_led_pins[] = {
4 k: I; U3 O7 D /* These pins are definition at <mach/mux.h> file *// a3 O' @- o M7 Y* o4 A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- {! z% l$ ^; G$ ?1 [ -1
0 f, H! w4 a& |7 z" S# ~};1 @+ {2 i6 b1 f7 G$ E! ^
7 q u+ ^( Z6 C5 R4 u8 ^7 ]static struct gpio_led da850_evm_tl_leds[] = {! k& z, l( f3 ~! D! h* k
{
, y* p5 H2 Y7 @% j% S1 {( s .active_low = 0,/ l$ c' Q, N" L+ O* v' [
.gpio = DA850_USER_LED0,9 d, o7 ^' i8 v
.name = "user_led0",8 S( A4 y( c# j* d
.default_trigger = "default-on",5 N8 L* q: U8 q2 l9 g' _
},, p& ]" d6 g1 F: U g* k
{
/ Y% I# J# u: [3 S4 w) j+ N .active_low = 0,4 G5 E* I- X5 k2 T7 A
.gpio = DA850_USER_LED1,- N! z$ s1 S4 f- E; ]% ~: [
.name = "user_led1",
; z3 ~, H& L+ {& d% _! p! d .default_trigger = "default-on",
8 }% `8 h6 d8 V/ e6 M" N },; I1 U; R3 L& M( V
{
: J7 k. R8 u+ ] .active_low = 0,
7 z, W3 T7 }5 l8 r) s .gpio = DA850_USER_LED2, J6 m2 R* A, m8 @
.name = "user_led2",
# F# V4 r3 F5 b/ l7 ^) g .default_trigger = "default-on",
; x5 X8 O" l: W( ] z1 f },
- d4 i6 q! X5 F5 ~4 u6 f' p3 H- f, i A {; O6 \3 z ^ Y' }
.active_low = 0,
7 d: _. K3 p( l1 P% p" N2 m" w. B .gpio = DA850_USER_LED3,
( |/ }' f" ]! O. ^! Y9 L .name = "user_led3",/ Q9 W N: p" s& {
.default_trigger = "default-on",6 S2 B3 [6 D. E) ^ z* {7 W, |
},
4 Y7 {9 f" Q) l3 x6 J5 r" D9 `, A};' _* b$ a2 p3 F* G
% z T+ t. T1 y2 c, S+ Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = { j$ D3 T* O) N+ m1 o
.leds = da850_evm_tl_leds,1 q* h! e+ _# Z j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," C* e7 W" x1 D. N7 i- S' j& N q
};
. p8 y# y' O+ q+ J3 Z& r9 L5 y P6 y( \3 c! x/ V
static void led_dev_release(struct device *dev)3 g: Z6 o0 m0 G
{
+ I C p! _4 E2 z& ]9 \( F- I# C};
9 [5 o; Z# A" T; ^% K$ X6 H' O: L8 L4 r
static struct platform_device da850_evm_tl_leds_device = {
* \9 Y! A5 x9 e1 `% V5 Y* Q+ h: c .name = "leds-gpio",
; O5 Y2 I" M& U# {* U$ O0 g .id = 1,
# s5 i( z) t5 U9 P; }: | .dev = {' s/ ?4 w7 X' ]: G5 {- m. U
.platform_data = &da850_evm_tl_leds_pdata,
) z' s- Z2 v! E( V .release = led_dev_release,
/ P j u9 _# B- ] }3 ]7 y' B) ] g+ A; {0 i3 d. e2 \
};+ D( |2 ]) L: [, A
8 K* n5 k2 e: n& ^& g( q" f
static int __init led_platform_init(void)/ N$ [# S2 x# @# X
{2 K2 R& y6 Z# x' j. m
int ret;6 K' e" {# B& D; |
#if 0
1 _0 p0 B. T/ o+ W8 @- | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ h7 a3 e+ l2 Y# z: r3 z! M
if (ret)) H9 `# ~+ |) P7 L, {% S
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. S' ?4 P: `5 q1 e7 m7 o" ^ "%d\n", ret);- P7 m; @5 u/ }) R$ h& \
#endif3 J: t0 g# o* |
ret = platform_device_register(&da850_evm_tl_leds_device);# C" C) j% @6 ]1 d6 \) Q
if (ret)
7 M6 ?$ A- @4 r- i7 q; o pr_warning("Could not register som GPIO expander LEDS");: o9 w- |9 e( ^
else
1 G. p& `) C+ [" q printk(KERN_INFO "LED register sucessful!\n");' e+ y0 T O% ]; f# Z# F; B7 }
! W. e. U6 l" C/ S' i
return ret;
0 Y& O2 X+ t0 P$ u1 t G}$ N$ ~: g" v! K( Y ?
5 v( a5 a6 o6 a9 jstatic void __exit led_platform_exit(void)& D0 @+ b& c8 k# @( v% Y: g/ q
{, I1 v7 w2 j" h; s& Z
platform_device_unregister(&da850_evm_tl_leds_device);# e8 c1 S- x# ~& k/ {
+ P1 t% J) W0 u8 _% i$ k; R printk(KERN_INFO "LED unregister!\n");
3 _4 u& H' \2 X i$ S7 N5 G}
- G* _$ f# |4 A! ~2 E; D+ [' c
; j5 {& c4 H5 z) V- f0 @: Q5 Mmodule_init(led_platform_init);* q4 p# i! e9 p- A
module_exit(led_platform_exit);
2 |3 |5 ~! d Z6 T F! `. L) M h
MODULE_DESCRIPTION("Led platform driver");6 G3 a" H1 S5 ^( k
MODULE_AUTHOR("Tronlong");
: V# r/ O. V7 Y: J3 q9 O, eMODULE_LICENSE("GPL");
# k5 E# {" N; q
' [( T) e, z2 H% W$ L8 F |
|