+#include <linux/ctype.h>
+
+static ssize_t display_dss_gamma_store(struct device *dev,
+ struct device_attribute *attr, const char *buf, size_t size)
+{
+ struct omap_dss_device *dssdev = to_dss_device(dev);
+ unsigned int table[256];
+ char *end = NULL;
+ int i, ret;
+
+ for (i = 0; i < 256; ) {
+ table[i++] = simple_strtoul(buf, &end, 0);
+ while (isspace(*end))
+ end++;
+ if (*end == 0)
+ break;
+ buf = end;
+ }
+
+ ret = dispc_runtime_get();
+ if (ret < 0)
+ return ret;
+
+ if (i == 1 && table[0] == 0)
+ dispc_set_gamma_table(NULL, 0);
+ else if (i < 256) {
+ dev_err(dev, "not enough gamma values supplied (%d)\n", i);
+ dispc_set_gamma_table(NULL, 0);
+ } else
+ dispc_set_gamma_table(table, 256 * 4);
+
+ dispc_mgr_go(dssdev->manager->id);
+
+ dispc_runtime_put();
+
+ return size;
+}
+