Skip to content

Instantly share code, notes, and snippets.

@azbesthu
Created October 26, 2012 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azbesthu/3961778 to your computer and use it in GitHub Desktop.
Save azbesthu/3961778 to your computer and use it in GitHub Desktop.
raspberry pi, media_build backport patch
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