|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 B/ ?" K8 M0 B- J3 Q* @- Q: S#include <linux/init.h>
! M0 ~9 q/ n7 y! B# [$ N#include <linux/module.h>
( _# w0 M7 j9 s5 s. {4 W#include <linux/kernel.h>
. w4 W: \( T$ ^8 t6 k6 [#include <linux/types.h>
! w4 D3 m) s" S/ o2 @% z# S B#include <linux/gpio.h>
$ T4 P2 q, P: b! e#include <linux/leds.h>
. p& P F4 s) N#include <linux/platform_device.h>
' R t3 U9 |7 m6 t7 T' j1 S
. `6 R4 C1 X; ]; z: r: O1 e9 ]) e#include <asm/mach-types.h>
5 @5 o' c2 y7 G# ]* p) g#include <asm/mach/arch.h>
6 x, @* ^& v5 t7 D7 O7 I#include <mach/da8xx.h>
2 s; o, w7 h$ I) N0 E* I2 b$ j#include <mach/mux.h>
* q6 ?2 q1 z5 k# f9 Z2 L |
$ N$ V3 [( h u' q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% h0 _4 Y0 S" G3 b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 I# s" N$ ? |( ^9 A+ ~) {9 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, c; C. C8 V" D2 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), E' ~; V* |9 f8 T! Y4 T, e
4 x! D4 z/ g, p8 m8 s4 O/* assign the tl som board LED-GPIOs*/
- h. U7 l# Q$ c3 X; bstatic const short da850_evm_tl_user_led_pins[] = {
, g# |5 k/ C$ I3 u /* These pins are definition at <mach/mux.h> file */
- y$ Z" l4 A( X6 Z7 {. W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, _2 L0 Q" ?. f
-1
; {% m$ d* [/ O7 O: J* E/ d# S};$ S4 }8 x" R* N3 k; f, K
# R1 R: G3 X% G2 K- ~+ Z/ d: u0 Tstatic struct gpio_led da850_evm_tl_leds[] = {
) R( }& t9 j' ] W3 ` {
) _. s6 ?& P+ A X: ~2 l& @; @ .active_low = 0,2 }) {1 Z8 G- ^' o( n
.gpio = DA850_USER_LED0,
- n; p2 j) n# s& A1 K .name = "user_led0",' r. n* W& i9 a; Y
.default_trigger = "default-on",( D9 q; C% B$ {- o. ?3 k
}, c/ F2 O" C- b
{& w6 L8 q1 P0 g# p3 J+ u
.active_low = 0,
1 `% X4 k1 W) C" w( ]& d- ~ .gpio = DA850_USER_LED1,
% [* y a2 K; H; v/ `8 }. R .name = "user_led1",9 e) j) X! @! d/ A
.default_trigger = "default-on",
6 \; d$ z6 w! ?$ l) R d) R5 r },/ K N* {6 `9 Y
{5 a# Z+ u, {5 C( a* i5 o
.active_low = 0,
p) e! ]4 r3 Y- O- w .gpio = DA850_USER_LED2,
2 B+ a2 `4 l# N7 _ .name = "user_led2",. Y0 j0 v- w# V8 P( d5 f
.default_trigger = "default-on",
! h1 @* g$ n0 M% u. c( n- ]& K6 K },
2 e& J, b7 i6 M) n9 ^4 T1 D {
" s$ a! _& ~1 I) h* t" X+ B .active_low = 0,8 Y3 P; T ~/ C: H7 L" _
.gpio = DA850_USER_LED3,
, {' A- A7 G) y .name = "user_led3",
5 x s. G |$ \5 k" b7 n. R6 x .default_trigger = "default-on",
+ d) t" X7 t' Q) n% ~5 l7 V }," r% Y. G4 ` E- L0 m1 }
};
8 Q8 g+ S% N7 C9 } Z% C" E. q8 n+ }5 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 y: u9 U# Z* B3 ~, J
.leds = da850_evm_tl_leds,
: G) ?: p) C6 h8 F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% S8 X0 }" L, W; E5 `% p};
5 @0 H r$ e$ f1 }, R
. |1 N% J+ W! P! N4 J T- Bstatic void led_dev_release(struct device *dev)- e! y( \0 D+ ]! R
{
- `. Q+ }. j; }/ R, H& D2 a};$ G. i9 X% j3 U4 D6 q$ U
$ U. R( m1 ]2 B3 U! B |
static struct platform_device da850_evm_tl_leds_device = {/ l5 U# k) `8 T+ y. u5 D
.name = "leds-gpio",
2 ]5 z+ P' k) X' [& B8 X .id = 1,, {4 i1 b7 A, D0 v( B
.dev = {" \3 P7 v( C. G& o, j. \) d
.platform_data = &da850_evm_tl_leds_pdata,
y2 ~6 i9 B" H4 g$ m7 M .release = led_dev_release,
5 a6 G+ i* o0 ]6 r }
' f' d$ ]* [4 D8 t3 M};) l( H/ K3 a. n* v
3 J: U5 T- j' t4 o; X m# q$ Z. Rstatic int __init led_platform_init(void)8 Z( [ }1 N% l- ~2 w
{
3 Q \; {; O5 B0 v& m int ret;+ w* Z1 f7 z2 a/ T% ]0 `9 U
#if 0
6 O+ v- |1 `0 T. i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& d5 e4 `2 c$ K7 E" I
if (ret)7 b0 Y7 n9 g' s4 b4 f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 A# x# O5 r4 o! r7 G- |- b
"%d\n", ret);
- ]0 E/ g9 R. C- I0 r# E#endif
& u7 B) G; l2 [+ m) _7 ^8 M ret = platform_device_register(&da850_evm_tl_leds_device);" v! b. I' i5 o3 {/ ~ E
if (ret)4 G: [$ R7 i8 t* P% D6 ^4 P
pr_warning("Could not register som GPIO expander LEDS");+ E' j- j3 j' t! |
else
- ^! N, i3 s! Q$ [' o: G; c printk(KERN_INFO "LED register sucessful!\n"); O" P4 j) P; X3 q
. `- i/ t* ^. O ?& f
return ret;
( j) h' ]: h% e2 a0 K}1 u6 ^- ^ K) T% Q' b b
" z0 c% v9 J# }8 s) L) D5 b2 r) tstatic void __exit led_platform_exit(void)
; [+ O0 U: J. a3 p9 [ B{# I) W% \4 j4 u
platform_device_unregister(&da850_evm_tl_leds_device);% E5 G, z' X9 U/ c7 _7 {: n
. x. R8 O0 x6 h; U printk(KERN_INFO "LED unregister!\n");" ]- h# D# s- h2 A |: n2 F" G9 M+ M
}
9 \! }0 T2 f+ \) o4 v5 l- K6 m( O
5 Y9 G" V$ |. u9 l. h J! {module_init(led_platform_init);
4 n5 E# f! c- H( h- x! Wmodule_exit(led_platform_exit);
. g& X) u+ K8 h5 V" {' [- a9 @% I4 l/ _/ Y8 C* q$ E
MODULE_DESCRIPTION("Led platform driver");
: c9 M y, s5 ~4 e9 ~1 M0 V/ I ]MODULE_AUTHOR("Tronlong");
; S1 D: ]; {3 o1 [8 W2 {3 N. U5 {MODULE_LICENSE("GPL");/ I: C; D3 B7 B
9 H2 h1 F1 k; k% a4 q) Q: g1 k |
|