#include "devices.h"
#include "../../../drivers/input/touchscreen/xpt2046_cbn_ts.h"
+#include "../../../drivers/misc/gps/rk29_gps.h"
/* Set memory size of pmem */
#endif
+#if defined(CONFIG_RK29_GPS)
+
+#define RK29_GPS_POWER_PIN RK29_PIN6_PB2
+#define RK29_GPS_RESET_PIN RK29_PIN6_PC1
+
+static int gps_open =0;
+
+int rk29_gps_power_up(void)
+{
+ gps_open = 1;
+ printk("%s \n", __FUNCTION__);
+ gpio_request(RK29_GPS_POWER_PIN, NULL);
+ gpio_direction_output(RK29_GPS_POWER_PIN, GPIO_HIGH);
+ gpio_request(RK29_GPS_RESET_PIN, NULL);
+ gpio_direction_output(RK29_GPS_RESET_PIN, GPIO_LOW);
+ rk29_mux_api_set(GPIO2B3_UART3SOUT_NAME, GPIO2L_UART3_SOUT);
+ rk29_mux_api_set(GPIO2B2_UART3SIN_NAME, GPIO2L_UART3_SIN);
+ mdelay(100);
+ gpio_direction_output(RK29_GPS_RESET_PIN, GPIO_HIGH);
+ return 0;
+}
+
+int rk29_gps_power_down(void)
+{
+ gps_open =0;
+ printk("%s \n", __FUNCTION__);
+ gpio_direction_output(RK29_GPS_POWER_PIN, GPIO_LOW);
+ mdelay(100);
+ gpio_direction_output(RK29_GPS_RESET_PIN, GPIO_LOW); //uart1
+ return 0;
+}
+
+
+struct rk29_gps_data rk29_gps_info = {
+ .power_up = rk29_gps_power_up,
+ .power_down = rk29_gps_power_down,
+ .uart_id = 3,
+ .powerpin = RK29_GPS_POWER_PIN,
+ .powerflag = 1,
+ };
+
+struct platform_device rk29_device_gps = {
+ .name = "rk29_gps",
+ .id = -1,
+ .dev = {
+ .platform_data = &rk29_gps_info,
+ }
+ };
+#endif
/*****************************************************************************************
* i2c devices
--- /dev/null
+#include <linux/input.h>\r
+#include <linux/module.h>\r
+#include <linux/init.h>\r
+#include <linux/interrupt.h>\r
+#include <linux/kernel.h>\r
+#include <linux/fcntl.h>\r
+#include <linux/delay.h>\r
+#include <linux/device.h>\r
+#include <linux/miscdevice.h>\r
+#include <asm/types.h>\r
+#include <mach/gpio.h>\r
+#include <mach/iomux.h>\r
+#include <linux/platform_device.h>\r
+#include "rk29_gps.h"\r
+#ifdef CONFIG_HAS_EARLYSUSPEND\r
+#include <linux/earlysuspend.h>\r
+#endif\r
+#if 0\r
+#define DBG(x...) printk(KERN_INFO x)\r
+#else\r
+#define DBG(x...)\r
+#endif\r
+\r
+#define ENABLE 1\r
+#define DISABLE 0\r
+\r
+static struct rk29_gps_data *pgps;\r
+static struct early_suspend gps_early_suspend;\r
+\r
+static void rk29_gps_early_suspend(struct early_suspend *h)\r
+{\r
+ struct rk29_gps_data *pdata = pgps;\r
+ if(!pdata)\r
+ return;\r
+ \r
+ if(pdata->uart_id == 3)\r
+ {\r
+ rk29_mux_api_set(GPIO2B3_UART3SOUT_NAME, GPIO2L_GPIO2B3); \r
+ gpio_request(RK29_PIN2_PB3, NULL);\r
+ gpio_direction_output(RK29_PIN2_PB3,GPIO_LOW);\r
+\r
+ rk29_mux_api_set(GPIO2B2_UART3SIN_NAME, GPIO2L_GPIO2B2); \r
+ gpio_request(RK29_PIN2_PB2, NULL);\r
+ gpio_direction_output(RK29_PIN2_PB2,GPIO_LOW);\r
+\r
+ }\r
+ else\r
+ {\r
+ //to do\r
+\r
+ }\r
+\r
+ if(pdata->powerflag == 1)\r
+ {\r
+ pdata->power_down(); \r
+ pdata->powerflag = 0;\r
+ }\r
+ \r
+ printk("%s\n",__FUNCTION__);\r
+ \r
+}\r
+\r
+static void rk29_gps_early_resume(struct early_suspend *h)\r
+{\r
+ struct rk29_gps_data *pdata = pgps;\r
+ if(!pdata)\r
+ return;\r
+ \r
+ if(pdata->uart_id == 3)\r
+ {\r
+ rk29_mux_api_set(GPIO2B3_UART3SOUT_NAME, GPIO2L_UART3_SOUT);\r
+ rk29_mux_api_set(GPIO2B2_UART3SIN_NAME, GPIO2L_UART3_SIN); \r
+ }\r
+ else\r
+ {\r
+ //to do\r
+\r
+ }\r
+\r
+ if(pdata->powerflag == 0)\r
+ {\r
+ pdata->power_up();\r
+ pdata->powerflag = 1;\r
+ }\r
+ \r
+ printk("%s\n",__FUNCTION__);\r
+ \r
+}\r
+int rk29_gps_open(struct inode *inode, struct file *filp)\r
+{\r
+ DBG("rk29_gps_open\n");\r
+\r
+ return 0;\r
+}\r
+\r
+int rk29_gps_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)\r
+{\r
+ int ret = 0;\r
+ \r
+ DBG("rk29_gps_ioctl: cmd = %d\n",cmd);\r
+\r
+ switch (cmd){\r
+ case ENABLE:\r
+ pgps->power_up();\r
+ pgps->powerflag = 1;\r
+ break;\r
+ \r
+ case DISABLE:\r
+ pgps->power_down();\r
+ pgps->powerflag = 0;\r
+ break;\r
+ \r
+ default:\r
+ printk("unknown ioctl cmd!\n");\r
+ ret = -EINVAL;\r
+ break;\r
+ }\r
+\r
+ return ret;\r
+}\r
+\r
+\r
+int rk29_gps_release(struct inode *inode, struct file *filp)\r
+{\r
+ DBG("rk29_gps_release\n");\r
+ \r
+ return 0;\r
+}\r
+\r
+static struct file_operations rk29_gps_fops = {\r
+ .owner = THIS_MODULE,\r
+ .open = rk29_gps_open,\r
+ .ioctl = rk29_gps_ioctl,\r
+ .release = rk29_gps_release,\r
+};\r
+\r
+static struct miscdevice rk29_gps_dev = \r
+{\r
+ .minor = MISC_DYNAMIC_MINOR,\r
+ .name = "rk29_gps",\r
+ .fops = &rk29_gps_fops,\r
+};\r
+\r
+static int rk29_gps_probe(struct platform_device *pdev)\r
+{\r
+ int ret = 0;\r
+ struct rk29_gps_data *pdata = pdev->dev.platform_data;\r
+ if(!pdata)\r
+ return -1;\r
+ \r
+ ret = misc_register(&rk29_gps_dev);\r
+ if (ret < 0){\r
+ printk("rk29 gps register err!\n");\r
+ return ret;\r
+ }\r
+ \r
+ if(pdata->power_up)\r
+ pdata->power_up();\r
+ pgps = pdata;\r
+\r
+#ifdef CONFIG_HAS_EARLYSUSPEND\r
+ gps_early_suspend.suspend = rk29_gps_early_suspend;\r
+ gps_early_suspend.resume = rk29_gps_early_resume;\r
+ gps_early_suspend.level = ~0x0;\r
+ register_early_suspend(&gps_early_suspend);\r
+#endif\r
+\r
+ printk("%s:rk29 GPS initialized\n",__FUNCTION__);\r
+\r
+ return ret;\r
+}\r
+\r
+static struct platform_driver rk29_gps_driver = {\r
+ .probe = rk29_gps_probe,\r
+ .driver = {\r
+ .name = "rk29_gps",\r
+ .owner = THIS_MODULE,\r
+ },\r
+};\r
+\r
+static int __init rk29_gps_init(void)\r
+{\r
+ return platform_driver_register(&rk29_gps_driver);\r
+}\r
+\r
+static void __exit rk29_gps_exit(void)\r
+{\r
+ platform_driver_unregister(&rk29_gps_driver);\r
+}\r
+\r
+module_init(rk29_gps_init);\r
+module_exit(rk29_gps_exit);\r
+MODULE_DESCRIPTION ("rk29 gps driver");\r
+MODULE_LICENSE("GPL");\r
+\r