blob: b9243c411845be868a0d437278b9e846c990291f [file] [log] [blame]
developere0cea0f2021-12-16 16:08:26 +08001// SPDX-License-Identifier: GPL-2.0
2
3#include <linux/module.h>
4#include <linux/kernel.h>
5#include <linux/moduleparam.h>
6#include "proslic_sys.h"
7
8#define PROSLIC_SYS_SERVICES_VER "0.0.1"
9#define DRIVER_DESCRIPTION "ProSLIC API compatible system services"
10#define DRIVER_AUTHOR "Silicon Laboratories"
11
12int proslic_debug_setting = SILABS_DEFAULT_DBG;
13int proslic_channel_count = SILABS_MAX_CHANNELS;
14
15module_param(proslic_debug_setting, int, S_IRUSR | S_IWUSR |S_IRGRP | S_IWGRP);
16MODULE_PARM_DESC(proslic_debug_setting, "debug mode bitmask, 1 = TRC, 2 = DBG, 4 = ERR");
17module_param(proslic_channel_count, int, S_IRUSR | S_IRGRP );
18MODULE_PARM_DESC(proslic_channel_count, "Number of actual channels on the platform");
19
20/*****************************************************************************************************/
21
22int init_module(void)
23{
24 int rc;
25
26 printk( KERN_INFO "ProSLIC API system services module loaded, version: %s\n", PROSLIC_SYS_SERVICES_VER);
27 printk( KERN_INFO "Debug = 0x%0x\n", proslic_debug_setting);
28
29 if(proslic_channel_count > SILABS_MAX_CHANNELS)
30 {
31 printk( KERN_ERR "proslic_channel_count max is: %d, got: %d\n", SILABS_MAX_CHANNELS, proslic_channel_count);
32 return -EINVAL;
33 }
34
35 rc = proslic_spi_setup();
36
37 if(rc == 0)
38 {
39 /* TODO: any other init we may want tot do here... */
40 }
41 else
42 {
43 printk( KERN_ERR "proslic_spi_setup returned: %d\n", rc);
44 return rc;
45 }
46
47 return 0;
48
49}
50
51void cleanup_module(void)
52{
53 proslic_spi_shutdown();
54 printk( KERN_INFO "ProSLIC API system services module unloaded.\n");
55}
56
57MODULE_DESCRIPTION(DRIVER_DESCRIPTION);
58MODULE_AUTHOR(DRIVER_AUTHOR);
59MODULE_LICENSE("Dual MPL/GPL");
60
61EXPORT_SYMBOL(proslic_spi_if);
62EXPORT_SYMBOL(proslic_timer_if);
63EXPORT_SYMBOL(proslic_get_channel_count);
64EXPORT_SYMBOL(proslic_get_device_type);
65EXPORT_SYMBOL(proslic_get_hCtrl);