diff options
Diffstat (limited to 'drivers/w1')
| -rw-r--r-- | drivers/w1/masters/w1-gpio.c | 6 | ||||
| -rw-r--r-- | drivers/w1/w1.c | 3 | 
2 files changed, 6 insertions, 3 deletions
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c index d39dfa4cc23..46d97014342 100644 --- a/drivers/w1/masters/w1-gpio.c +++ b/drivers/w1/masters/w1-gpio.c @@ -47,11 +47,13 @@ static u8 w1_gpio_read_bit(void *data)  	return gpio_get_value(pdata->pin) ? 1 : 0;  } +#if defined(CONFIG_OF)  static struct of_device_id w1_gpio_dt_ids[] = {  	{ .compatible = "w1-gpio" },  	{}  };  MODULE_DEVICE_TABLE(of, w1_gpio_dt_ids); +#endif  static int w1_gpio_probe_dt(struct platform_device *pdev)  { @@ -158,7 +160,7 @@ static int w1_gpio_probe(struct platform_device *pdev)  	return err;  } -static int __exit w1_gpio_remove(struct platform_device *pdev) +static int w1_gpio_remove(struct platform_device *pdev)  {  	struct w1_bus_master *master = platform_get_drvdata(pdev);  	struct w1_gpio_platform_data *pdata = pdev->dev.platform_data; @@ -210,7 +212,7 @@ static struct platform_driver w1_gpio_driver = {  		.of_match_table = of_match_ptr(w1_gpio_dt_ids),  	},  	.probe = w1_gpio_probe, -	.remove	= __exit_p(w1_gpio_remove), +	.remove	= w1_gpio_remove,  	.suspend = w1_gpio_suspend,  	.resume = w1_gpio_resume,  }; diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c index 7994d933f04..7ce277d2bb6 100644 --- a/drivers/w1/w1.c +++ b/drivers/w1/w1.c @@ -924,7 +924,8 @@ void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb  			tmp64 = (triplet_ret >> 2);  			rn |= (tmp64 << i); -			if (kthread_should_stop()) { +			/* ensure we're called from kthread and not by netlink callback */ +			if (!dev->priv && kthread_should_stop()) {  				mutex_unlock(&dev->bus_mutex);  				dev_dbg(&dev->dev, "Abort w1_search\n");  				return;  |