<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: mx53 and mc34708 wakeup in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/mx53-and-mc34708-wakeup/m-p/253509#M23632</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hello,alexeym,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I did it based on mc34708+i.mx53, please add the following:&lt;/P&gt;&lt;P&gt;/*Maybe you have these 4 lines in your BSP*/&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP0_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E00)&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP1_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E04)&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP2_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E08)&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP3_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E0C)&lt;/P&gt;&lt;P&gt;/*Use GPIO1_8 to control wakeup and sleep*/&lt;/P&gt;&lt;P&gt;#define GPIO1_8_18_IRQ_BIT&amp;nbsp;&amp;nbsp; (0x1&amp;lt;&amp;lt;18)&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;/*Following code should be adjusted*/&lt;/P&gt;&lt;P&gt;static void pad_tzic_irq_wakeup(void)&lt;BR /&gt;{&lt;BR /&gt;void __iomem *tzic_base;&lt;BR /&gt;tzic_base = ioremap(MX53_TZIC_BASE_ADDR, SZ_4K);&lt;BR /&gt;if (NULL == tzic_base) {&lt;BR /&gt;&amp;nbsp; pr_err("fail to map MX53_TZIC_BASE_ADDR\n");&lt;BR /&gt;&amp;nbsp; return;&lt;BR /&gt;}&lt;BR /&gt;__raw_writel(0, tzic_base + TZIC_WAKEUP0_OFFSET);&lt;BR /&gt;__raw_writel(0, tzic_base + TZIC_WAKEUP2_OFFSET);&lt;BR /&gt;__raw_writel(0, tzic_base + TZIC_WAKEUP3_OFFSET);&lt;/P&gt;&lt;P&gt;__raw_writel(GPIO1_8_18_IRQ_BIT, tzic_base + TZIC_WAKEUP1_OFFSET);&lt;BR /&gt;iounmap(tzic_base);&lt;BR /&gt;pr_info("TZIC irq is wakeup-enabled\n");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static void pad_suspend_enter(void)&lt;BR /&gt;{&lt;BR /&gt;pad_tzic_irq_wakeup();&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static void pad_suspend_exit(void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;/*add your suppend exit code*/&lt;BR /&gt;printk(KERN_INFO "GPIO1_8 irq is to wakeup system\n");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static struct mxc_pm_platform_data pad_pm_data = {&lt;BR /&gt;.suspend_enter = pad_suspend_enter,&lt;BR /&gt;.suspend_exit = pad_suspend_exit,&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;/*following is your above code */&lt;/P&gt;&lt;P&gt;.....&lt;/P&gt;&lt;P&gt;.....&lt;/P&gt;&lt;P&gt;&amp;lt;Note: accroding to reference manul ,the interrupt number of GPIO_1 signal0~signal15 is 50, we can calculate wakeup bit in TZIC, see page 4622, 32x1+18 = 50, so we can find wakeup bit : No.18 bit in WAKEUP1 register. &amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; See attachment, for you as a reference. &lt;STRONG&gt;But you should notice that you can't clear wakeup source of USB. In my code ,I cleaned it.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Weidong&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 23 May 2013 06:44:50 GMT</pubDate>
    <dc:creator>weidong_sun</dc:creator>
    <dc:date>2013-05-23T06:44:50Z</dc:date>
    <item>
      <title>mx53 and mc34708 wakeup</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/mx53-and-mc34708-wakeup/m-p/253508#M23631</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello all,&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I've got custom mx53 board based on mx53 loco with mc34708 power and last 2.6.35 kernel from freescale git.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My MC34708&amp;nbsp; PMIC_INT connected to CSI0_DAT10 and muxed as gpio 5_28.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How to get power button to work?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;AFAIK TZIC workaround needs to be used only for da9053 boards.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Some code below:&lt;/P&gt;&lt;BLOCKQUOTE&gt;
&lt;P&gt;#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)&lt;/P&gt;
&lt;P&gt;#define GPIO_BUTTON(gpio_num, ev_code, act_low, descr, wake) \&lt;/P&gt;
&lt;P&gt;{ \&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .gpio = gpio_num, \&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .type = EV_KEY, \&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .code = ev_code, \&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .active_low = act_low, \&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .desc = "btn " descr, \&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .wakeup = wake, \&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static struct gpio_keys_button loco_buttons[] = {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; GPIO_BUTTON(MX53_nONKEY, KEY_POWER, 1, "power", 0),&lt;/P&gt;
&lt;P&gt;};&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static struct gpio_keys_platform_data loco_button_data = {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .buttons = loco_buttons,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .nbuttons = ARRAY_SIZE(loco_buttons),&lt;/P&gt;
&lt;P&gt;};&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static struct platform_device loco_button_device = {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .name = "gpio-keys",&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .id = -1,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .num_resources&amp;nbsp; = 0,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .dev = {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .platform_data = &amp;amp;loco_button_data,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;};&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void __init loco_add_device_buttons(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; platform_device_register(&amp;amp;loco_button_device);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;#else&lt;/P&gt;
&lt;P&gt;static void __init loco_add_device_buttons(void) {}&lt;/P&gt;
&lt;P&gt;#endif&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void mxc_register_powerkey(pwrkey_callback pk_cb)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; pmic_event_callback_t power_key_event;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; power_key_event.param = (void *)1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; power_key_event.func = (void *)pk_cb;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; pmic_event_subscribe(EVENT_PWRONI, power_key_event);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static int mxc_pwrkey_getstatus(int id)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; int sense;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; pmic_read_reg(REG_INT_SENSE1, &amp;amp;sense, 0xffffffff);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if (sense &amp;amp; (1 &amp;lt;&amp;lt; 3))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; return 1;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static struct power_key_platform_data pwrkey_data = {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .key_value = KEY_F4,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .register_pwrkey = mxc_register_powerkey,&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .get_key_status = mxc_pwrkey_getstatus,&lt;/P&gt;
&lt;P&gt;};&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;//-------- init&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;mc34708_int = MX53_PAD_CSI0_DAT10__GPIO5_28;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; mx53_loco_mc34708_irq = (4*32 + 28);&lt;/P&gt;
&lt;P&gt; mxc_iomux_v3_setup_pad(mc34708_int);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; gpio_request(mx53_loco_mc34708_irq, "pmic-int");&lt;/P&gt;
&lt;P&gt;&amp;nbsp; gpio_direction_input(mx53_loco_mc34708_irq);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; mx53_loco_init_mc34708(mx53_loco_mc34708_irq);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; dvfs_core_data.reg_id = "SW1A";&lt;/P&gt;
&lt;P&gt;&amp;nbsp; tve_data.dac_reg = "VDAC";&lt;/P&gt;
&lt;P&gt;&amp;nbsp; bus_freq_data.gp_reg_id = "SW1A";&lt;/P&gt;
&lt;P&gt;&amp;nbsp; bus_freq_data.lp_reg_id = "SW2";&lt;/P&gt;
&lt;P&gt;&amp;nbsp; mxc_register_device(&amp;amp;mxc_powerkey_device, &amp;amp;pwrkey_data);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; mxc_register_device(&amp;amp;pm_device, &amp;amp;loco_pm_data);&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; loco_add_device_buttons();&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;&lt;P&gt;I can wakeup board thru USB, but cannot use button.&lt;/P&gt;&lt;P&gt;I even can't check gpio thru terminal:&lt;/P&gt;&lt;P&gt;echo 156 &amp;gt; sys/class/gpio/export&lt;/P&gt;&lt;P&gt;-bash: echo: write error: Device or resource busy&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What's wrong with my configuration?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 May 2013 04:00:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/mx53-and-mc34708-wakeup/m-p/253508#M23631</guid>
      <dc:creator>alexeym</dc:creator>
      <dc:date>2013-05-23T04:00:35Z</dc:date>
    </item>
    <item>
      <title>Re: mx53 and mc34708 wakeup</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/mx53-and-mc34708-wakeup/m-p/253509#M23632</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hello,alexeym,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I did it based on mc34708+i.mx53, please add the following:&lt;/P&gt;&lt;P&gt;/*Maybe you have these 4 lines in your BSP*/&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP0_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E00)&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP1_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E04)&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP2_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E08)&lt;/P&gt;&lt;P&gt;#define TZIC_WAKEUP3_OFFSET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x0E0C)&lt;/P&gt;&lt;P&gt;/*Use GPIO1_8 to control wakeup and sleep*/&lt;/P&gt;&lt;P&gt;#define GPIO1_8_18_IRQ_BIT&amp;nbsp;&amp;nbsp; (0x1&amp;lt;&amp;lt;18)&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;/*Following code should be adjusted*/&lt;/P&gt;&lt;P&gt;static void pad_tzic_irq_wakeup(void)&lt;BR /&gt;{&lt;BR /&gt;void __iomem *tzic_base;&lt;BR /&gt;tzic_base = ioremap(MX53_TZIC_BASE_ADDR, SZ_4K);&lt;BR /&gt;if (NULL == tzic_base) {&lt;BR /&gt;&amp;nbsp; pr_err("fail to map MX53_TZIC_BASE_ADDR\n");&lt;BR /&gt;&amp;nbsp; return;&lt;BR /&gt;}&lt;BR /&gt;__raw_writel(0, tzic_base + TZIC_WAKEUP0_OFFSET);&lt;BR /&gt;__raw_writel(0, tzic_base + TZIC_WAKEUP2_OFFSET);&lt;BR /&gt;__raw_writel(0, tzic_base + TZIC_WAKEUP3_OFFSET);&lt;/P&gt;&lt;P&gt;__raw_writel(GPIO1_8_18_IRQ_BIT, tzic_base + TZIC_WAKEUP1_OFFSET);&lt;BR /&gt;iounmap(tzic_base);&lt;BR /&gt;pr_info("TZIC irq is wakeup-enabled\n");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static void pad_suspend_enter(void)&lt;BR /&gt;{&lt;BR /&gt;pad_tzic_irq_wakeup();&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static void pad_suspend_exit(void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;/*add your suppend exit code*/&lt;BR /&gt;printk(KERN_INFO "GPIO1_8 irq is to wakeup system\n");&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static struct mxc_pm_platform_data pad_pm_data = {&lt;BR /&gt;.suspend_enter = pad_suspend_enter,&lt;BR /&gt;.suspend_exit = pad_suspend_exit,&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;/*following is your above code */&lt;/P&gt;&lt;P&gt;.....&lt;/P&gt;&lt;P&gt;.....&lt;/P&gt;&lt;P&gt;&amp;lt;Note: accroding to reference manul ,the interrupt number of GPIO_1 signal0~signal15 is 50, we can calculate wakeup bit in TZIC, see page 4622, 32x1+18 = 50, so we can find wakeup bit : No.18 bit in WAKEUP1 register. &amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; See attachment, for you as a reference. &lt;STRONG&gt;But you should notice that you can't clear wakeup source of USB. In my code ,I cleaned it.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Weidong&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 May 2013 06:44:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/mx53-and-mc34708-wakeup/m-p/253509#M23632</guid>
      <dc:creator>weidong_sun</dc:creator>
      <dc:date>2013-05-23T06:44:50Z</dc:date>
    </item>
    <item>
      <title>Re: mx53 and mc34708 wakeup</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/mx53-and-mc34708-wakeup/m-p/253510#M23633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry, that was hardware problem, everything works fine. Thanks for your help anyway!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 May 2013 00:31:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/mx53-and-mc34708-wakeup/m-p/253510#M23633</guid>
      <dc:creator>alexeym</dc:creator>
      <dc:date>2013-05-27T00:31:22Z</dc:date>
    </item>
  </channel>
</rss>

