Created
October 26, 2012 21:50
-
-
Save azbesthu/3961778 to your computer and use it in GitHub Desktop.
raspberry pi, media_build backport patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/backports/backports.txt b/backports/backports.txt | |
index 5554d9e..79913f1 100644 | |
--- a/backports/backports.txt | |
+++ b/backports/backports.txt | |
@@ -24,6 +24,9 @@ | |
add api_version.patch | |
add pr_fmt.patch | |
+[3.2.255] | |
+add v3.2.27_devm-revert.patch | |
+ | |
[3.1.255] | |
add v3.1_no_export_h.patch | |
add v3.1_no_pm_qos.patch | |
diff --git a/backports/v3.2.27_devm-revert.patch b/backports/v3.2.27_devm-revert.patch | |
new file mode 100644 | |
index 0000000..febf1be | |
--- /dev/null | |
+++ b/backports/v3.2.27_devm-revert.patch | |
@@ -0,0 +1,139 @@ | |
+--- | |
+ drivers/media/i2c/smiapp/smiapp-core.c | 45 +++++++++++++++++++++++++------- | |
+ 1 file changed, 35 insertions(+), 10 deletions(-) | |
+ | |
+diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c | |
+index e08e588..3cfc605 100644 | |
+--- a/drivers/media/i2c/smiapp/smiapp-core.c | |
++++ b/drivers/media/i2c/smiapp/smiapp-core.c | |
+@@ -2374,19 +2374,20 @@ static int smiapp_registered(struct v4l2_subdev *subdev) | |
+ unsigned int i; | |
+ int rval; | |
+ | |
+- sensor->vana = devm_regulator_get(&client->dev, "VANA"); | |
++ sensor->vana = regulator_get(&client->dev, "VANA"); | |
+ if (IS_ERR(sensor->vana)) { | |
+ dev_err(&client->dev, "could not get regulator for vana\n"); | |
+ return -ENODEV; | |
+ } | |
+ | |
+ if (!sensor->platform_data->set_xclk) { | |
+- sensor->ext_clk = devm_clk_get(&client->dev, | |
++ sensor->ext_clk = clk_get(&client->dev, | |
+ sensor->platform_data->ext_clk_name); | |
+ if (IS_ERR(sensor->ext_clk)) { | |
+ dev_err(&client->dev, "could not get clock %s\n", | |
+ sensor->platform_data->ext_clk_name); | |
+- return -ENODEV; | |
++ rval = -ENODEV; | |
++ goto out_clk_get; | |
+ } | |
+ | |
+ rval = clk_set_rate(sensor->ext_clk, | |
+@@ -2396,7 +2397,8 @@ static int smiapp_registered(struct v4l2_subdev *subdev) | |
+ "unable to set clock %s freq to %u\n", | |
+ sensor->platform_data->ext_clk_name, | |
+ sensor->platform_data->ext_clk); | |
+- return -ENODEV; | |
++ rval = -ENODEV; | |
++ goto out_clk_set_rate; | |
+ } | |
+ } | |
+ | |
+@@ -2406,7 +2408,8 @@ static int smiapp_registered(struct v4l2_subdev *subdev) | |
+ dev_err(&client->dev, | |
+ "unable to acquire reset gpio %d\n", | |
+ sensor->platform_data->xshutdown); | |
+- return -ENODEV; | |
++ rval = -ENODEV; | |
++ goto out_clk_set_rate; | |
+ } | |
+ } | |
+ | |
+@@ -2491,8 +2494,8 @@ static int smiapp_registered(struct v4l2_subdev *subdev) | |
+ * when it is first requested by userspace. | |
+ */ | |
+ if (sensor->minfo.smiapp_version && sensor->platform_data->nvm_size) { | |
+- sensor->nvm = devm_kzalloc(&client->dev, | |
+- sensor->platform_data->nvm_size, GFP_KERNEL); | |
++ sensor->nvm = kzalloc(sensor->platform_data->nvm_size, | |
++ GFP_KERNEL); | |
+ if (sensor->nvm == NULL) { | |
+ dev_err(&client->dev, "nvm buf allocation failed\n"); | |
+ rval = -ENOMEM; | |
+@@ -2661,12 +2664,21 @@ out_ident_release: | |
+ device_remove_file(&client->dev, &dev_attr_ident); | |
+ | |
+ out_power_off: | |
++ kfree(sensor->nvm); | |
++ sensor->nvm = NULL; | |
+ smiapp_power_off(sensor); | |
+ | |
+ out_smiapp_power_on: | |
+ if (sensor->platform_data->xshutdown != SMIAPP_NO_XSHUTDOWN) | |
+ gpio_free(sensor->platform_data->xshutdown); | |
+ | |
++out_clk_set_rate: | |
++ clk_put(sensor->ext_clk); | |
++ sensor->ext_clk = NULL; | |
++ | |
++out_clk_get: | |
++ regulator_put(sensor->vana); | |
++ sensor->vana = NULL; | |
+ return rval; | |
+ } | |
+ | |
+@@ -2816,11 +2828,12 @@ static int smiapp_probe(struct i2c_client *client, | |
+ const struct i2c_device_id *devid) | |
+ { | |
+ struct smiapp_sensor *sensor; | |
++ int rval; | |
+ | |
+ if (client->dev.platform_data == NULL) | |
+ return -ENODEV; | |
+ | |
+- sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL); | |
++ sensor = kzalloc(sizeof(*sensor), GFP_KERNEL); | |
+ if (sensor == NULL) | |
+ return -ENOMEM; | |
+ | |
+@@ -2835,8 +2848,12 @@ static int smiapp_probe(struct i2c_client *client, | |
+ sensor->src->sensor = sensor; | |
+ | |
+ sensor->src->pads[0].flags = MEDIA_PAD_FL_SOURCE; | |
+- return media_entity_init(&sensor->src->sd.entity, 2, | |
++ rval = media_entity_init(&sensor->src->sd.entity, 2, | |
+ sensor->src->pads, 0); | |
++ if (rval < 0) | |
++ kfree(sensor); | |
++ | |
++ return rval; | |
+ } | |
+ | |
+ static int __exit smiapp_remove(struct i2c_client *client) | |
+@@ -2856,8 +2873,10 @@ static int __exit smiapp_remove(struct i2c_client *client) | |
+ } | |
+ | |
+ device_remove_file(&client->dev, &dev_attr_ident); | |
+- if (sensor->nvm) | |
++ if (sensor->nvm) { | |
+ device_remove_file(&client->dev, &dev_attr_nvm); | |
++ kfree(sensor->nvm); | |
++ } | |
+ | |
+ for (i = 0; i < sensor->ssds_used; i++) { | |
+ media_entity_cleanup(&sensor->ssds[i].sd.entity); | |
+@@ -2866,6 +2885,12 @@ static int __exit smiapp_remove(struct i2c_client *client) | |
+ smiapp_free_controls(sensor); | |
+ if (sensor->platform_data->xshutdown != SMIAPP_NO_XSHUTDOWN) | |
+ gpio_free(sensor->platform_data->xshutdown); | |
++ if (sensor->ext_clk) | |
++ clk_put(sensor->ext_clk); | |
++ if (sensor->vana) | |
++ regulator_put(sensor->vana); | |
++ | |
++ kfree(sensor); | |
+ | |
+ return 0; | |
+ } | |
+ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment