فهرست منبع

waterDataDiscreteRateMining memoryOperation.c 袁明明 commit at 2020-10-28

袁明明 4 سال پیش
والد
کامیت
a933bb8337
1فایلهای تغییر یافته به همراه84 افزوده شده و 0 حذف شده
  1. 84 0
      waterDataDiscreteRateMining/dataSharedMemory/memoryOperation.c

+ 84 - 0
waterDataDiscreteRateMining/dataSharedMemory/memoryOperation.c

@@ -533,3 +533,87 @@ GET_GPIO_P(both)
 GET_GPIO_P(maska)
 GET_GPIO_P(maskb)
 
+
+#ifdef CONFIG_PM
+DECLARE_RESERVED_MAP(wakeup, GPIO_BANK_NUM);
+
+static const unsigned int sic_iwr_irqs[] = {
+#if defined(BF533_FAMILY)
+	IRQ_PROG_INTB
+#elif defined(BF537_FAMILY)
+	IRQ_PF_INTB_WATCH, IRQ_PORTG_INTB, IRQ_PH_INTB_MAC_TX
+#elif defined(BF538_FAMILY)
+	IRQ_PORTF_INTB
+#elif defined(CONFIG_BF52x) || defined(CONFIG_BF51x)
+	IRQ_PORTF_INTB, IRQ_PORTG_INTB, IRQ_PORTH_INTB
+#elif defined(BF561_FAMILY)
+	IRQ_PROG0_INTB, IRQ_PROG1_INTB, IRQ_PROG2_INTB
+#else
+# error no SIC_IWR defined
+#endif
+};
+
+/***********************************************************
+*
+* FUNCTIONS: Blackfin PM Setup API
+*
+* INPUTS/OUTPUTS:
+* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
+* type -
+*	PM_WAKE_RISING
+*	PM_WAKE_FALLING
+*	PM_WAKE_HIGH
+*	PM_WAKE_LOW
+*	PM_WAKE_BOTH_EDGES
+*
+* DESCRIPTION: Blackfin PM Driver API
+*
+* CAUTION:
+*************************************************************
+* MODIFICATION HISTORY :
+**************************************************************/
+int gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl)
+{
+	unsigned long flags;
+
+	if (check_gpio(gpio) < 0)
+		return -EINVAL;
+
+	flags = hard_local_irq_save();
+	if (ctrl)
+		reserve(wakeup, gpio);
+	else
+		unreserve(wakeup, gpio);
+
+	set_gpio_maskb(gpio, ctrl);
+	hard_local_irq_restore(flags);
+
+	return 0;
+}
+
+int bfin_pm_standby_ctrl(unsigned ctrl)
+{
+	u16 bank, mask, i;
+
+	for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
+		mask = map_entry(wakeup, i);
+		bank = gpio_bank(i);
+
+		if (mask)
+			bfin_internal_set_wake(sic_iwr_irqs[bank], ctrl);
+	}
+	return 0;
+}
+
+void bfin_gpio_pm_hibernate_suspend(void)
+{
+	int i, bank;
+
+#ifdef BF538_FAMILY
+	for (i = 0; i < ARRAY_SIZE(port_fer_saved); ++i)
+		port_fer_saved[i] = *port_fer[i];
+#endif
+
+	for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
+		bank = gpio_bank(i);
+