static struct regulator *baseband_reg;
static struct gpio modem_gpios[] = { /* i500 modem */
{MDM_RST, GPIOF_OUT_INIT_LOW, "MODEM RESET"},
- {MDM_ACK, GPIOF_OUT_INIT_HIGH, "MODEM ACK1"},
-};
-
-static void baseband_post_phy_on(void);
-static void baseband_pre_phy_off(void);
-
-static struct tegra_usb_phy_platform_ops baseband_plat_ops = {
- .pre_phy_off = baseband_pre_phy_off,
- .post_phy_on = baseband_post_phy_on,
};
static struct gpio modem2_gpios[] = {
.remote_wakeup_supported = false,
.power_off_on_suspend = false,
},
- .ops = &baseband_plat_ops,
};
#ifdef CONFIG_ARCH_TEGRA_11x_SOC
};
#endif
-static void baseband_post_phy_on(void)
-{
- gpio_set_value(MDM_ACK, 0);
-}
-
-static void baseband_pre_phy_off(void)
-{
- gpio_set_value(MDM_ACK, 1);
-}
-
static int baseband_init(void)
{
int ret;
static struct tegra_usb_modem_power_platform_data baseband_pdata = {
.ops = &baseband_operations,
- .wake_gpio = MDM_REQ,
- .wake_irq_flags = IRQF_TRIGGER_FALLING,
+ .wake_gpio = -1,
.boot_gpio = MDM_COLDBOOT,
.boot_irq_flags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
.autosuspend_delay = 2000,
/* Modem1 related GPIOs */
#define MDM_RST TEGRA_GPIO_PR3
#define MDM_COLDBOOT TEGRA_GPIO_PO5
-#define MDM_REQ TEGRA_GPIO_PO4
-#define MDM_ACK TEGRA_GPIO_PO1
/* Modem2 related GPIOs */
#define MDM2_PWR_ON TEGRA_GPIO_PX1
/* tegra usb modem power platform data */
struct tegra_usb_modem_power_platform_data {
const struct tegra_modem_operations *ops;
- unsigned int wake_gpio; /* remote wakeup gpio */
+ int wake_gpio; /* remote wakeup gpio */
unsigned long wake_irq_flags; /* remote wakeup irq flags */
- unsigned int boot_gpio; /* modem boot gpio */
+ int boot_gpio; /* modem boot gpio */
unsigned long boot_irq_flags; /* modem boot irq flags */
int autosuspend_delay; /* autosuspend delay in milliseconds */
int short_autosuspend_delay; /* short autosuspend delay in ms */
pm_qos_add_request(&modem->cpu_boost_req, PM_QOS_CPU_FREQ_MIN,
PM_QOS_DEFAULT_VALUE);
- /* request remote wakeup irq from platform data */
- ret = mdm_request_wakeable_irq(modem,
- tegra_usb_modem_wake_thread,
- pdata->wake_gpio,
- pdata->wake_irq_flags,
- "mdm_wake", &modem->wake_irq);
- if (ret) {
- dev_err(&pdev->dev, "request wake irq error\n");
- goto error;
+ /* if wake gpio is not specified we rely on native usb remote wake */
+ if (gpio_is_valid(pdata->wake_gpio)) {
+ /* request remote wakeup irq from platform data */
+ ret = mdm_request_wakeable_irq(modem,
+ tegra_usb_modem_wake_thread,
+ pdata->wake_gpio,
+ pdata->wake_irq_flags,
+ "mdm_wake", &modem->wake_irq);
+ if (ret) {
+ dev_err(&pdev->dev, "request wake irq error\n");
+ goto error;
+ }
}
- /* request boot irq from platform data */
- ret = mdm_request_wakeable_irq(modem,
- tegra_usb_modem_boot_thread,
- pdata->boot_gpio,
- pdata->boot_irq_flags,
- "mdm_boot", &modem->boot_irq);
- if (ret) {
- dev_err(&pdev->dev, "request boot irq error\n");
+ if (gpio_is_valid(pdata->boot_gpio)) {
+ /* request boot irq from platform data */
+ ret = mdm_request_wakeable_irq(modem,
+ tegra_usb_modem_boot_thread,
+ pdata->boot_gpio,
+ pdata->boot_irq_flags,
+ "mdm_boot", &modem->boot_irq);
+ if (ret) {
+ dev_err(&pdev->dev, "request boot irq error\n");
+ goto error;
+ }
+ } else {
+ dev_err(&pdev->dev, "boot irq not specified\n");
goto error;
}
-EINVAL, /* wake29 */
-EINVAL, /* wake30 */
-EINVAL, /* wake31 */
- TEGRA_GPIO_PO4, /* wake32 */
+ -EINVAL, /* wake32 */
TEGRA_GPIO_PJ0, /* wake33 */
TEGRA_GPIO_PK2, /* wake34 */
TEGRA_GPIO_PI6, /* wake35 */