Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 190d7cfc authored by Chanwoo Choi's avatar Chanwoo Choi
Browse files

extcon: max77693: Fix bug of wrong pointer when platform data is not used



This patch fix wrong pointer of platform data. If each machine set
platform data for h/w path or delay time of workqueue, this driver
happen kernel panic related to null pointer.

Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: default avatarMyungjoo Ham <myungjoo.ham@samsung.com>
parent 810d601f
Loading
Loading
Loading
Loading
+52 −38
Original line number Diff line number Diff line
@@ -1045,7 +1045,6 @@ static int max77693_muic_probe(struct platform_device *pdev)
{
	struct max77693_dev *max77693 = dev_get_drvdata(pdev->dev.parent);
	struct max77693_platform_data *pdata = dev_get_platdata(max77693->dev);
	struct max77693_muic_platform_data *muic_pdata = pdata->muic_data;
	struct max77693_muic_info *info;
	int delay_jiffies;
	int ret;
@@ -1145,9 +1144,13 @@ static int max77693_muic_probe(struct platform_device *pdev)
		goto err_irq;
	}

	if (pdata->muic_data) {
		struct max77693_muic_platform_data *muic_pdata = pdata->muic_data;

		/* Initialize MUIC register by using platform data */
		for (i = 0 ; i < muic_pdata->num_init_data ; i++) {
		enum max77693_irq_source irq_src = MAX77693_IRQ_GROUP_NR;
			enum max77693_irq_source irq_src
					= MAX77693_IRQ_GROUP_NR;

			max77693_write_reg(info->max77693->regmap_muic,
					muic_pdata->init_data[i].addr,
@@ -1184,6 +1187,21 @@ static int max77693_muic_probe(struct platform_device *pdev)
		else
			info->path_usb = CONTROL1_SW_USB;

		/*
		 * Default delay time for detecting cable state
		 * after certain time.
		 */
		if (muic_pdata->detcable_delay_ms)
			delay_jiffies =
				msecs_to_jiffies(muic_pdata->detcable_delay_ms);
		else
			delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT);
	} else {
		info->path_usb = CONTROL1_SW_USB;
		info->path_uart = CONTROL1_SW_UART;
		delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT);
	}

	/* Set initial path for UART */
	 max77693_muic_set_path(info, info->path_uart, true);

@@ -1208,10 +1226,6 @@ static int max77693_muic_probe(struct platform_device *pdev)
	 * driver should notify cable state to upper layer.
	 */
	INIT_DELAYED_WORK(&info->wq_detcable, max77693_muic_detect_cable_wq);
	if (muic_pdata->detcable_delay_ms)
		delay_jiffies = msecs_to_jiffies(muic_pdata->detcable_delay_ms);
	else
		delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT);
	schedule_delayed_work(&info->wq_detcable, delay_jiffies);

	return ret;