|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ R& ~+ M: U0 U, W3 A+ l#include <linux/init.h>2 s/ ^& e u0 ?( J
#include <linux/module.h>) Z f# l) F7 E* H3 U8 _* o
#include <linux/kernel.h>
, p, i& P, m3 d5 [" g#include <linux/types.h>. E( [3 p* o+ |
#include <linux/gpio.h>4 q% F6 M0 S! W2 H H
#include <linux/leds.h>: G. z9 S) ^ l6 O
#include <linux/platform_device.h>5 w$ f! \$ y8 e: |5 Z
5 H3 h% r( v7 S' }4 E
#include <asm/mach-types.h>
( r9 R0 n9 G" F0 [ f#include <asm/mach/arch.h>8 G9 l6 s0 C* U& |$ e Q! S
#include <mach/da8xx.h>0 B: T# R# X! E! f% U* D) w9 ?
#include <mach/mux.h>$ W8 y$ E/ Z5 v$ ?
0 m; n- x4 B) x0 @! f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 H* `# g5 t5 ~1 j- {0 f f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# E/ B w$ t' C( B0 [/ u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 i, N; _* o) T4 r1 {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% n( J8 L; M5 w% X; ~
8 I) @6 @- l' c0 ?7 c* w' b/* assign the tl som board LED-GPIOs*/
# t. e+ `+ T! X" g6 o( B$ U! W# Wstatic const short da850_evm_tl_user_led_pins[] = {/ t+ V! s9 Z* g- K5 ]
/* These pins are definition at <mach/mux.h> file */4 r: O- R$ p: ^, Y( T& t5 ^; J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 d9 D/ T- B: y L9 R! Q -1) G' O; C# f8 K+ w; r! i S
};" J6 Y* `$ F7 u ], I& }
0 O9 P* y% R7 J* W0 ^static struct gpio_led da850_evm_tl_leds[] = {/ I; A# a1 N* q' Q) ^8 p
{, J0 ~' i% [) a1 [
.active_low = 0,' p: b- |4 @4 x# t3 E3 E
.gpio = DA850_USER_LED0,5 k! c3 P; u8 ?$ H8 O& u5 ~9 R
.name = "user_led0",
- h7 K, O& `' x; ?$ B .default_trigger = "default-on",
& e* T" n, i, x },, w5 ] v4 L {+ y7 e. ?1 }5 z
{4 K( L& A7 a1 V! y
.active_low = 0,2 G3 v- ~& p6 H: z# @! g( n# B9 U
.gpio = DA850_USER_LED1,! ]: g! j/ ^2 e9 B; \( |
.name = "user_led1",
7 {9 i6 W7 j& B( g, \; L6 ~ .default_trigger = "default-on",
+ W9 x+ c0 G/ f },
- E: B1 J: Z& ^ b7 ^* k/ @! K, b5 T {
/ Y A) \4 z0 l" d .active_low = 0,
" ~/ X! L; v. L) } .gpio = DA850_USER_LED2,
- S# ]6 y- C0 E6 [& i& T+ H7 A .name = "user_led2",
( s3 i; a& a9 H; `( X) R+ \, \; D Q0 O .default_trigger = "default-on",
1 M7 l9 M2 J" @. v6 w% @7 v },7 \2 c3 W; b$ M; u
{
5 Z$ @1 I5 f* M- o2 A5 S .active_low = 0,) n" x N& P+ V* y6 R' p$ H
.gpio = DA850_USER_LED3,
7 p( Y( e1 m T1 F- E$ R .name = "user_led3",
6 P! ]% W2 G$ `3 S5 M9 ]( \ .default_trigger = "default-on",
! V/ M3 `, k# e( f- v$ d6 k },9 ]) o3 x; K7 ?) o
};
9 \, {! F: w+ N! q& K' j# m3 ?2 h- M7 S( {- \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! x% |9 D1 V' R# z9 B k .leds = da850_evm_tl_leds,# u; z1 T- T, |, ^' T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 k6 [7 W; c- j
};
$ F, \: D! k6 I7 r$ @! {( |& i# G8 K) v! p& q* R }* Z9 y. y
static void led_dev_release(struct device *dev)5 I8 e2 i/ U. ] P$ C
{; a9 w% X1 r0 n' {9 p1 j; O
};5 u4 W4 u0 O. L# W1 q4 j b& K
9 D! _9 W' U6 u7 E% d
static struct platform_device da850_evm_tl_leds_device = {
$ N# ] e. N6 \5 ~7 L1 g .name = "leds-gpio",
! r7 d5 {% {3 A2 w& K .id = 1,7 N7 ?5 K6 G4 w" P( v+ g8 v$ _
.dev = {
* p6 w# U% l6 H9 j+ o/ I .platform_data = &da850_evm_tl_leds_pdata,( x+ C$ s! V# ~
.release = led_dev_release,
- b6 D$ g# l# H; z9 y }
7 x# N# q7 z+ s};
% J3 I/ J% T& V6 a2 |2 C' A
2 {* j, z: R! A e. ^* zstatic int __init led_platform_init(void)1 l D7 f! N+ A5 b* I6 h
{
1 N2 ?" u3 ^! z f int ret;
* M4 T' {, O/ x/ R% @0 N0 s#if 02 u$ h6 w0 x. R$ Y0 J, d) w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! u6 e& G) C* H if (ret)
: r1 e' B+ R7 c) \7 q8 o2 n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ j: m% @$ o2 K: g/ o9 ~' s "%d\n", ret); d( r3 w- ^" u5 f+ W8 p
#endif
$ t/ v: z, O/ Q# h Z ret = platform_device_register(&da850_evm_tl_leds_device);5 h+ B% m( }, L7 b+ D1 z9 }
if (ret)6 P# ^1 }3 o; m1 w" s; P; L
pr_warning("Could not register som GPIO expander LEDS");5 ^* D4 u3 X# \
else3 S0 z- v4 ?+ Q3 \7 Z6 I
printk(KERN_INFO "LED register sucessful!\n");8 v6 ]% a6 G. H( J: A' B
+ \, K8 v7 C9 b7 l8 L0 Z3 }
return ret;# u& w M5 _: u3 N) s
}
1 K& G4 h, i9 f3 |
- f" w5 M D% I# Y$ V" k% Jstatic void __exit led_platform_exit(void)
1 n$ J1 z; o' m- Z6 y. [6 H{
0 X" F7 j1 X+ u8 E+ F. J! ` x. r+ I platform_device_unregister(&da850_evm_tl_leds_device);
% J! ]. T F$ d+ v7 `) H9 x& f( R# A& I
printk(KERN_INFO "LED unregister!\n");
! T2 c& }7 I$ j1 d9 h |}
% k* p ?' @; Q. i+ E$ a7 R- W- m, U0 y, d& r w& p# A
module_init(led_platform_init);: ~5 G- I/ k, f4 E9 K4 B8 B
module_exit(led_platform_exit);
( ^, Q9 O9 K; i9 {" ~9 Q; K. f% F+ `7 G' P5 `
MODULE_DESCRIPTION("Led platform driver");# t1 K8 G$ Y$ Y4 c7 m
MODULE_AUTHOR("Tronlong");# `; z7 e0 Q( v U; L. Q( @; F
MODULE_LICENSE("GPL");( ]/ O$ l8 ?7 V3 s" v0 I: V
2 W0 n1 w- X4 K: a/ W0 h8 r |
|