Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
[platform/kernel/linux-starfive.git] / drivers / gpu / drm / drm_mipi_dsi.c
1 /*
2  * MIPI DSI Bus
3  *
4  * Copyright (C) 2012-2013, Samsung Electronics, Co., Ltd.
5  * Andrzej Hajda <a.hajda@samsung.com>
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the
9  * "Software"), to deal in the Software without restriction, including
10  * without limitation the rights to use, copy, modify, merge, publish,
11  * distribute, sub license, and/or sell copies of the Software, and to
12  * permit persons to whom the Software is furnished to do so, subject to
13  * the following conditions:
14  *
15  * The above copyright notice and this permission notice (including the
16  * next paragraph) shall be included in all copies or substantial portions
17  * of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
22  * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
23  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25  * USE OR OTHER DEALINGS IN THE SOFTWARE.
26  */
27
28 #include <linux/device.h>
29 #include <linux/module.h>
30 #include <linux/of.h>
31 #include <linux/of_device.h>
32 #include <linux/pm_runtime.h>
33 #include <linux/slab.h>
34
35 #include <drm/display/drm_dsc.h>
36 #include <drm/drm_mipi_dsi.h>
37 #include <drm/drm_print.h>
38
39 #include <video/mipi_display.h>
40
41 /**
42  * DOC: dsi helpers
43  *
44  * These functions contain some common logic and helpers to deal with MIPI DSI
45  * peripherals.
46  *
47  * Helpers are provided for a number of standard MIPI DSI command as well as a
48  * subset of the MIPI DCS command set.
49  */
50
51 static int mipi_dsi_device_match(struct device *dev, struct device_driver *drv)
52 {
53         struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
54
55         /* attempt OF style match */
56         if (of_driver_match_device(dev, drv))
57                 return 1;
58
59         /* compare DSI device and driver names */
60         if (!strcmp(dsi->name, drv->name))
61                 return 1;
62
63         return 0;
64 }
65
66 static int mipi_dsi_uevent(const struct device *dev, struct kobj_uevent_env *env)
67 {
68         const struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
69         int err;
70
71         err = of_device_uevent_modalias(dev, env);
72         if (err != -ENODEV)
73                 return err;
74
75         add_uevent_var(env, "MODALIAS=%s%s", MIPI_DSI_MODULE_PREFIX,
76                        dsi->name);
77
78         return 0;
79 }
80
81 static const struct dev_pm_ops mipi_dsi_device_pm_ops = {
82         .runtime_suspend = pm_generic_runtime_suspend,
83         .runtime_resume = pm_generic_runtime_resume,
84         .suspend = pm_generic_suspend,
85         .resume = pm_generic_resume,
86         .freeze = pm_generic_freeze,
87         .thaw = pm_generic_thaw,
88         .poweroff = pm_generic_poweroff,
89         .restore = pm_generic_restore,
90 };
91
92 static struct bus_type mipi_dsi_bus_type = {
93         .name = "mipi-dsi",
94         .match = mipi_dsi_device_match,
95         .uevent = mipi_dsi_uevent,
96         .pm = &mipi_dsi_device_pm_ops,
97 };
98
99 /**
100  * of_find_mipi_dsi_device_by_node() - find the MIPI DSI device matching a
101  *    device tree node
102  * @np: device tree node
103  *
104  * Return: A pointer to the MIPI DSI device corresponding to @np or NULL if no
105  *    such device exists (or has not been registered yet).
106  */
107 struct mipi_dsi_device *of_find_mipi_dsi_device_by_node(struct device_node *np)
108 {
109         struct device *dev;
110
111         dev = bus_find_device_by_of_node(&mipi_dsi_bus_type, np);
112
113         return dev ? to_mipi_dsi_device(dev) : NULL;
114 }
115 EXPORT_SYMBOL(of_find_mipi_dsi_device_by_node);
116
117 static void mipi_dsi_dev_release(struct device *dev)
118 {
119         struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
120
121         of_node_put(dev->of_node);
122         kfree(dsi);
123 }
124
125 static const struct device_type mipi_dsi_device_type = {
126         .release = mipi_dsi_dev_release,
127 };
128
129 static struct mipi_dsi_device *mipi_dsi_device_alloc(struct mipi_dsi_host *host)
130 {
131         struct mipi_dsi_device *dsi;
132
133         dsi = kzalloc(sizeof(*dsi), GFP_KERNEL);
134         if (!dsi)
135                 return ERR_PTR(-ENOMEM);
136
137         dsi->host = host;
138         dsi->dev.bus = &mipi_dsi_bus_type;
139         dsi->dev.parent = host->dev;
140         dsi->dev.type = &mipi_dsi_device_type;
141
142         device_initialize(&dsi->dev);
143
144         return dsi;
145 }
146
147 static int mipi_dsi_device_add(struct mipi_dsi_device *dsi)
148 {
149         struct mipi_dsi_host *host = dsi->host;
150
151         dev_set_name(&dsi->dev, "%s.%d", dev_name(host->dev),  dsi->channel);
152
153         return device_add(&dsi->dev);
154 }
155
156 #if IS_ENABLED(CONFIG_OF)
157 static struct mipi_dsi_device *
158 of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
159 {
160         struct mipi_dsi_device_info info = { };
161         int ret;
162         u32 reg;
163
164         if (of_alias_from_compatible(node, info.type, sizeof(info.type)) < 0) {
165                 drm_err(host, "modalias failure on %pOF\n", node);
166                 return ERR_PTR(-EINVAL);
167         }
168
169         ret = of_property_read_u32(node, "reg", &reg);
170         if (ret) {
171                 drm_err(host, "device node %pOF has no valid reg property: %d\n",
172                         node, ret);
173                 return ERR_PTR(-EINVAL);
174         }
175
176         info.channel = reg;
177         info.node = of_node_get(node);
178
179         return mipi_dsi_device_register_full(host, &info);
180 }
181 #else
182 static struct mipi_dsi_device *
183 of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
184 {
185         return ERR_PTR(-ENODEV);
186 }
187 #endif
188
189 /**
190  * mipi_dsi_device_register_full - create a MIPI DSI device
191  * @host: DSI host to which this device is connected
192  * @info: pointer to template containing DSI device information
193  *
194  * Create a MIPI DSI device by using the device information provided by
195  * mipi_dsi_device_info template
196  *
197  * Returns:
198  * A pointer to the newly created MIPI DSI device, or, a pointer encoded
199  * with an error
200  */
201 struct mipi_dsi_device *
202 mipi_dsi_device_register_full(struct mipi_dsi_host *host,
203                               const struct mipi_dsi_device_info *info)
204 {
205         struct mipi_dsi_device *dsi;
206         int ret;
207
208         if (!info) {
209                 drm_err(host, "invalid mipi_dsi_device_info pointer\n");
210                 return ERR_PTR(-EINVAL);
211         }
212
213         if (info->channel > 3) {
214                 drm_err(host, "invalid virtual channel: %u\n", info->channel);
215                 return ERR_PTR(-EINVAL);
216         }
217
218         dsi = mipi_dsi_device_alloc(host);
219         if (IS_ERR(dsi)) {
220                 drm_err(host, "failed to allocate DSI device %ld\n",
221                         PTR_ERR(dsi));
222                 return dsi;
223         }
224
225         device_set_node(&dsi->dev, of_fwnode_handle(info->node));
226         dsi->channel = info->channel;
227         strscpy(dsi->name, info->type, sizeof(dsi->name));
228
229         ret = mipi_dsi_device_add(dsi);
230         if (ret) {
231                 drm_err(host, "failed to add DSI device %d\n", ret);
232                 kfree(dsi);
233                 return ERR_PTR(ret);
234         }
235
236         return dsi;
237 }
238 EXPORT_SYMBOL(mipi_dsi_device_register_full);
239
240 /**
241  * mipi_dsi_device_unregister - unregister MIPI DSI device
242  * @dsi: DSI peripheral device
243  */
244 void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi)
245 {
246         device_unregister(&dsi->dev);
247 }
248 EXPORT_SYMBOL(mipi_dsi_device_unregister);
249
250 static void devm_mipi_dsi_device_unregister(void *arg)
251 {
252         struct mipi_dsi_device *dsi = arg;
253
254         mipi_dsi_device_unregister(dsi);
255 }
256
257 /**
258  * devm_mipi_dsi_device_register_full - create a managed MIPI DSI device
259  * @dev: device to tie the MIPI-DSI device lifetime to
260  * @host: DSI host to which this device is connected
261  * @info: pointer to template containing DSI device information
262  *
263  * Create a MIPI DSI device by using the device information provided by
264  * mipi_dsi_device_info template
265  *
266  * This is the managed version of mipi_dsi_device_register_full() which
267  * automatically calls mipi_dsi_device_unregister() when @dev is
268  * unbound.
269  *
270  * Returns:
271  * A pointer to the newly created MIPI DSI device, or, a pointer encoded
272  * with an error
273  */
274 struct mipi_dsi_device *
275 devm_mipi_dsi_device_register_full(struct device *dev,
276                                    struct mipi_dsi_host *host,
277                                    const struct mipi_dsi_device_info *info)
278 {
279         struct mipi_dsi_device *dsi;
280         int ret;
281
282         dsi = mipi_dsi_device_register_full(host, info);
283         if (IS_ERR(dsi))
284                 return dsi;
285
286         ret = devm_add_action_or_reset(dev,
287                                        devm_mipi_dsi_device_unregister,
288                                        dsi);
289         if (ret)
290                 return ERR_PTR(ret);
291
292         return dsi;
293 }
294 EXPORT_SYMBOL_GPL(devm_mipi_dsi_device_register_full);
295
296 static DEFINE_MUTEX(host_lock);
297 static LIST_HEAD(host_list);
298
299 /**
300  * of_find_mipi_dsi_host_by_node() - find the MIPI DSI host matching a
301  *                                   device tree node
302  * @node: device tree node
303  *
304  * Returns:
305  * A pointer to the MIPI DSI host corresponding to @node or NULL if no
306  * such device exists (or has not been registered yet).
307  */
308 struct mipi_dsi_host *of_find_mipi_dsi_host_by_node(struct device_node *node)
309 {
310         struct mipi_dsi_host *host;
311
312         mutex_lock(&host_lock);
313
314         list_for_each_entry(host, &host_list, list) {
315                 if (host->dev->of_node == node) {
316                         mutex_unlock(&host_lock);
317                         return host;
318                 }
319         }
320
321         mutex_unlock(&host_lock);
322
323         return NULL;
324 }
325 EXPORT_SYMBOL(of_find_mipi_dsi_host_by_node);
326
327 int mipi_dsi_host_register(struct mipi_dsi_host *host)
328 {
329         struct device_node *node;
330
331         for_each_available_child_of_node(host->dev->of_node, node) {
332                 /* skip nodes without reg property */
333                 if (!of_property_present(node, "reg"))
334                         continue;
335                 of_mipi_dsi_device_add(host, node);
336         }
337
338         mutex_lock(&host_lock);
339         list_add_tail(&host->list, &host_list);
340         mutex_unlock(&host_lock);
341
342         return 0;
343 }
344 EXPORT_SYMBOL(mipi_dsi_host_register);
345
346 static int mipi_dsi_remove_device_fn(struct device *dev, void *priv)
347 {
348         struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
349
350         mipi_dsi_detach(dsi);
351         mipi_dsi_device_unregister(dsi);
352
353         return 0;
354 }
355
356 void mipi_dsi_host_unregister(struct mipi_dsi_host *host)
357 {
358         device_for_each_child(host->dev, NULL, mipi_dsi_remove_device_fn);
359
360         mutex_lock(&host_lock);
361         list_del_init(&host->list);
362         mutex_unlock(&host_lock);
363 }
364 EXPORT_SYMBOL(mipi_dsi_host_unregister);
365
366 /**
367  * mipi_dsi_attach - attach a DSI device to its DSI host
368  * @dsi: DSI peripheral
369  */
370 int mipi_dsi_attach(struct mipi_dsi_device *dsi)
371 {
372         const struct mipi_dsi_host_ops *ops = dsi->host->ops;
373
374         if (!ops || !ops->attach)
375                 return -ENOSYS;
376
377         return ops->attach(dsi->host, dsi);
378 }
379 EXPORT_SYMBOL(mipi_dsi_attach);
380
381 /**
382  * mipi_dsi_detach - detach a DSI device from its DSI host
383  * @dsi: DSI peripheral
384  */
385 int mipi_dsi_detach(struct mipi_dsi_device *dsi)
386 {
387         const struct mipi_dsi_host_ops *ops = dsi->host->ops;
388
389         if (!ops || !ops->detach)
390                 return -ENOSYS;
391
392         return ops->detach(dsi->host, dsi);
393 }
394 EXPORT_SYMBOL(mipi_dsi_detach);
395
396 static void devm_mipi_dsi_detach(void *arg)
397 {
398         struct mipi_dsi_device *dsi = arg;
399
400         mipi_dsi_detach(dsi);
401 }
402
403 /**
404  * devm_mipi_dsi_attach - Attach a MIPI-DSI device to its DSI Host
405  * @dev: device to tie the MIPI-DSI device attachment lifetime to
406  * @dsi: DSI peripheral
407  *
408  * This is the managed version of mipi_dsi_attach() which automatically
409  * calls mipi_dsi_detach() when @dev is unbound.
410  *
411  * Returns:
412  * 0 on success, a negative error code on failure.
413  */
414 int devm_mipi_dsi_attach(struct device *dev,
415                          struct mipi_dsi_device *dsi)
416 {
417         int ret;
418
419         ret = mipi_dsi_attach(dsi);
420         if (ret)
421                 return ret;
422
423         ret = devm_add_action_or_reset(dev, devm_mipi_dsi_detach, dsi);
424         if (ret)
425                 return ret;
426
427         return 0;
428 }
429 EXPORT_SYMBOL_GPL(devm_mipi_dsi_attach);
430
431 static ssize_t mipi_dsi_device_transfer(struct mipi_dsi_device *dsi,
432                                         struct mipi_dsi_msg *msg)
433 {
434         const struct mipi_dsi_host_ops *ops = dsi->host->ops;
435
436         if (!ops || !ops->transfer)
437                 return -ENOSYS;
438
439         if (dsi->mode_flags & MIPI_DSI_MODE_LPM)
440                 msg->flags |= MIPI_DSI_MSG_USE_LPM;
441
442         return ops->transfer(dsi->host, msg);
443 }
444
445 /**
446  * mipi_dsi_packet_format_is_short - check if a packet is of the short format
447  * @type: MIPI DSI data type of the packet
448  *
449  * Return: true if the packet for the given data type is a short packet, false
450  * otherwise.
451  */
452 bool mipi_dsi_packet_format_is_short(u8 type)
453 {
454         switch (type) {
455         case MIPI_DSI_V_SYNC_START:
456         case MIPI_DSI_V_SYNC_END:
457         case MIPI_DSI_H_SYNC_START:
458         case MIPI_DSI_H_SYNC_END:
459         case MIPI_DSI_COMPRESSION_MODE:
460         case MIPI_DSI_END_OF_TRANSMISSION:
461         case MIPI_DSI_COLOR_MODE_OFF:
462         case MIPI_DSI_COLOR_MODE_ON:
463         case MIPI_DSI_SHUTDOWN_PERIPHERAL:
464         case MIPI_DSI_TURN_ON_PERIPHERAL:
465         case MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM:
466         case MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM:
467         case MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM:
468         case MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM:
469         case MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM:
470         case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:
471         case MIPI_DSI_DCS_SHORT_WRITE:
472         case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
473         case MIPI_DSI_DCS_READ:
474         case MIPI_DSI_EXECUTE_QUEUE:
475         case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:
476                 return true;
477         }
478
479         return false;
480 }
481 EXPORT_SYMBOL(mipi_dsi_packet_format_is_short);
482
483 /**
484  * mipi_dsi_packet_format_is_long - check if a packet is of the long format
485  * @type: MIPI DSI data type of the packet
486  *
487  * Return: true if the packet for the given data type is a long packet, false
488  * otherwise.
489  */
490 bool mipi_dsi_packet_format_is_long(u8 type)
491 {
492         switch (type) {
493         case MIPI_DSI_NULL_PACKET:
494         case MIPI_DSI_BLANKING_PACKET:
495         case MIPI_DSI_GENERIC_LONG_WRITE:
496         case MIPI_DSI_DCS_LONG_WRITE:
497         case MIPI_DSI_PICTURE_PARAMETER_SET:
498         case MIPI_DSI_COMPRESSED_PIXEL_STREAM:
499         case MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20:
500         case MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24:
501         case MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16:
502         case MIPI_DSI_PACKED_PIXEL_STREAM_30:
503         case MIPI_DSI_PACKED_PIXEL_STREAM_36:
504         case MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12:
505         case MIPI_DSI_PACKED_PIXEL_STREAM_16:
506         case MIPI_DSI_PACKED_PIXEL_STREAM_18:
507         case MIPI_DSI_PIXEL_STREAM_3BYTE_18:
508         case MIPI_DSI_PACKED_PIXEL_STREAM_24:
509                 return true;
510         }
511
512         return false;
513 }
514 EXPORT_SYMBOL(mipi_dsi_packet_format_is_long);
515
516 /**
517  * mipi_dsi_create_packet - create a packet from a message according to the
518  *     DSI protocol
519  * @packet: pointer to a DSI packet structure
520  * @msg: message to translate into a packet
521  *
522  * Return: 0 on success or a negative error code on failure.
523  */
524 int mipi_dsi_create_packet(struct mipi_dsi_packet *packet,
525                            const struct mipi_dsi_msg *msg)
526 {
527         if (!packet || !msg)
528                 return -EINVAL;
529
530         /* do some minimum sanity checking */
531         if (!mipi_dsi_packet_format_is_short(msg->type) &&
532             !mipi_dsi_packet_format_is_long(msg->type))
533                 return -EINVAL;
534
535         if (msg->channel > 3)
536                 return -EINVAL;
537
538         memset(packet, 0, sizeof(*packet));
539         packet->header[0] = ((msg->channel & 0x3) << 6) | (msg->type & 0x3f);
540
541         /* TODO: compute ECC if hardware support is not available */
542
543         /*
544          * Long write packets contain the word count in header bytes 1 and 2.
545          * The payload follows the header and is word count bytes long.
546          *
547          * Short write packets encode up to two parameters in header bytes 1
548          * and 2.
549          */
550         if (mipi_dsi_packet_format_is_long(msg->type)) {
551                 packet->header[1] = (msg->tx_len >> 0) & 0xff;
552                 packet->header[2] = (msg->tx_len >> 8) & 0xff;
553
554                 packet->payload_length = msg->tx_len;
555                 packet->payload = msg->tx_buf;
556         } else {
557                 const u8 *tx = msg->tx_buf;
558
559                 packet->header[1] = (msg->tx_len > 0) ? tx[0] : 0;
560                 packet->header[2] = (msg->tx_len > 1) ? tx[1] : 0;
561         }
562
563         packet->size = sizeof(packet->header) + packet->payload_length;
564
565         return 0;
566 }
567 EXPORT_SYMBOL(mipi_dsi_create_packet);
568
569 /**
570  * mipi_dsi_shutdown_peripheral() - sends a Shutdown Peripheral command
571  * @dsi: DSI peripheral device
572  *
573  * Return: 0 on success or a negative error code on failure.
574  */
575 int mipi_dsi_shutdown_peripheral(struct mipi_dsi_device *dsi)
576 {
577         struct mipi_dsi_msg msg = {
578                 .channel = dsi->channel,
579                 .type = MIPI_DSI_SHUTDOWN_PERIPHERAL,
580                 .tx_buf = (u8 [2]) { 0, 0 },
581                 .tx_len = 2,
582         };
583         int ret = mipi_dsi_device_transfer(dsi, &msg);
584
585         return (ret < 0) ? ret : 0;
586 }
587 EXPORT_SYMBOL(mipi_dsi_shutdown_peripheral);
588
589 /**
590  * mipi_dsi_turn_on_peripheral() - sends a Turn On Peripheral command
591  * @dsi: DSI peripheral device
592  *
593  * Return: 0 on success or a negative error code on failure.
594  */
595 int mipi_dsi_turn_on_peripheral(struct mipi_dsi_device *dsi)
596 {
597         struct mipi_dsi_msg msg = {
598                 .channel = dsi->channel,
599                 .type = MIPI_DSI_TURN_ON_PERIPHERAL,
600                 .tx_buf = (u8 [2]) { 0, 0 },
601                 .tx_len = 2,
602         };
603         int ret = mipi_dsi_device_transfer(dsi, &msg);
604
605         return (ret < 0) ? ret : 0;
606 }
607 EXPORT_SYMBOL(mipi_dsi_turn_on_peripheral);
608
609 /*
610  * mipi_dsi_set_maximum_return_packet_size() - specify the maximum size of
611  *    the payload in a long packet transmitted from the peripheral back to the
612  *    host processor
613  * @dsi: DSI peripheral device
614  * @value: the maximum size of the payload
615  *
616  * Return: 0 on success or a negative error code on failure.
617  */
618 int mipi_dsi_set_maximum_return_packet_size(struct mipi_dsi_device *dsi,
619                                             u16 value)
620 {
621         u8 tx[2] = { value & 0xff, value >> 8 };
622         struct mipi_dsi_msg msg = {
623                 .channel = dsi->channel,
624                 .type = MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE,
625                 .tx_len = sizeof(tx),
626                 .tx_buf = tx,
627         };
628         int ret = mipi_dsi_device_transfer(dsi, &msg);
629
630         return (ret < 0) ? ret : 0;
631 }
632 EXPORT_SYMBOL(mipi_dsi_set_maximum_return_packet_size);
633
634 /**
635  * mipi_dsi_compression_mode() - enable/disable DSC on the peripheral
636  * @dsi: DSI peripheral device
637  * @enable: Whether to enable or disable the DSC
638  *
639  * Enable or disable Display Stream Compression on the peripheral using the
640  * default Picture Parameter Set and VESA DSC 1.1 algorithm.
641  *
642  * Return: 0 on success or a negative error code on failure.
643  */
644 ssize_t mipi_dsi_compression_mode(struct mipi_dsi_device *dsi, bool enable)
645 {
646         /* Note: Needs updating for non-default PPS or algorithm */
647         u8 tx[2] = { enable << 0, 0 };
648         struct mipi_dsi_msg msg = {
649                 .channel = dsi->channel,
650                 .type = MIPI_DSI_COMPRESSION_MODE,
651                 .tx_len = sizeof(tx),
652                 .tx_buf = tx,
653         };
654         int ret = mipi_dsi_device_transfer(dsi, &msg);
655
656         return (ret < 0) ? ret : 0;
657 }
658 EXPORT_SYMBOL(mipi_dsi_compression_mode);
659
660 /**
661  * mipi_dsi_picture_parameter_set() - transmit the DSC PPS to the peripheral
662  * @dsi: DSI peripheral device
663  * @pps: VESA DSC 1.1 Picture Parameter Set
664  *
665  * Transmit the VESA DSC 1.1 Picture Parameter Set to the peripheral.
666  *
667  * Return: 0 on success or a negative error code on failure.
668  */
669 ssize_t mipi_dsi_picture_parameter_set(struct mipi_dsi_device *dsi,
670                                        const struct drm_dsc_picture_parameter_set *pps)
671 {
672         struct mipi_dsi_msg msg = {
673                 .channel = dsi->channel,
674                 .type = MIPI_DSI_PICTURE_PARAMETER_SET,
675                 .tx_len = sizeof(*pps),
676                 .tx_buf = pps,
677         };
678         int ret = mipi_dsi_device_transfer(dsi, &msg);
679
680         return (ret < 0) ? ret : 0;
681 }
682 EXPORT_SYMBOL(mipi_dsi_picture_parameter_set);
683
684 /**
685  * mipi_dsi_generic_write() - transmit data using a generic write packet
686  * @dsi: DSI peripheral device
687  * @payload: buffer containing the payload
688  * @size: size of payload buffer
689  *
690  * This function will automatically choose the right data type depending on
691  * the payload length.
692  *
693  * Return: The number of bytes transmitted on success or a negative error code
694  * on failure.
695  */
696 ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *payload,
697                                size_t size)
698 {
699         struct mipi_dsi_msg msg = {
700                 .channel = dsi->channel,
701                 .tx_buf = payload,
702                 .tx_len = size
703         };
704
705         switch (size) {
706         case 0:
707                 msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM;
708                 break;
709
710         case 1:
711                 msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM;
712                 break;
713
714         case 2:
715                 msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM;
716                 break;
717
718         default:
719                 msg.type = MIPI_DSI_GENERIC_LONG_WRITE;
720                 break;
721         }
722
723         return mipi_dsi_device_transfer(dsi, &msg);
724 }
725 EXPORT_SYMBOL(mipi_dsi_generic_write);
726
727 /**
728  * mipi_dsi_generic_read() - receive data using a generic read packet
729  * @dsi: DSI peripheral device
730  * @params: buffer containing the request parameters
731  * @num_params: number of request parameters
732  * @data: buffer in which to return the received data
733  * @size: size of receive buffer
734  *
735  * This function will automatically choose the right data type depending on
736  * the number of parameters passed in.
737  *
738  * Return: The number of bytes successfully read or a negative error code on
739  * failure.
740  */
741 ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params,
742                               size_t num_params, void *data, size_t size)
743 {
744         struct mipi_dsi_msg msg = {
745                 .channel = dsi->channel,
746                 .tx_len = num_params,
747                 .tx_buf = params,
748                 .rx_len = size,
749                 .rx_buf = data
750         };
751
752         switch (num_params) {
753         case 0:
754                 msg.type = MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM;
755                 break;
756
757         case 1:
758                 msg.type = MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM;
759                 break;
760
761         case 2:
762                 msg.type = MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM;
763                 break;
764
765         default:
766                 return -EINVAL;
767         }
768
769         return mipi_dsi_device_transfer(dsi, &msg);
770 }
771 EXPORT_SYMBOL(mipi_dsi_generic_read);
772
773 /**
774  * mipi_dsi_dcs_write_buffer() - transmit a DCS command with payload
775  * @dsi: DSI peripheral device
776  * @data: buffer containing data to be transmitted
777  * @len: size of transmission buffer
778  *
779  * This function will automatically choose the right data type depending on
780  * the command payload length.
781  *
782  * Return: The number of bytes successfully transmitted or a negative error
783  * code on failure.
784  */
785 ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi,
786                                   const void *data, size_t len)
787 {
788         struct mipi_dsi_msg msg = {
789                 .channel = dsi->channel,
790                 .tx_buf = data,
791                 .tx_len = len
792         };
793
794         switch (len) {
795         case 0:
796                 return -EINVAL;
797
798         case 1:
799                 msg.type = MIPI_DSI_DCS_SHORT_WRITE;
800                 break;
801
802         case 2:
803                 msg.type = MIPI_DSI_DCS_SHORT_WRITE_PARAM;
804                 break;
805
806         default:
807                 msg.type = MIPI_DSI_DCS_LONG_WRITE;
808                 break;
809         }
810
811         return mipi_dsi_device_transfer(dsi, &msg);
812 }
813 EXPORT_SYMBOL(mipi_dsi_dcs_write_buffer);
814
815 /**
816  * mipi_dsi_dcs_write() - send DCS write command
817  * @dsi: DSI peripheral device
818  * @cmd: DCS command
819  * @data: buffer containing the command payload
820  * @len: command payload length
821  *
822  * This function will automatically choose the right data type depending on
823  * the command payload length.
824  *
825  * Return: The number of bytes successfully transmitted or a negative error
826  * code on failure.
827  */
828 ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd,
829                            const void *data, size_t len)
830 {
831         ssize_t err;
832         size_t size;
833         u8 stack_tx[8];
834         u8 *tx;
835
836         size = 1 + len;
837         if (len > ARRAY_SIZE(stack_tx) - 1) {
838                 tx = kmalloc(size, GFP_KERNEL);
839                 if (!tx)
840                         return -ENOMEM;
841         } else {
842                 tx = stack_tx;
843         }
844
845         /* concatenate the DCS command byte and the payload */
846         tx[0] = cmd;
847         if (data)
848                 memcpy(&tx[1], data, len);
849
850         err = mipi_dsi_dcs_write_buffer(dsi, tx, size);
851
852         if (tx != stack_tx)
853                 kfree(tx);
854
855         return err;
856 }
857 EXPORT_SYMBOL(mipi_dsi_dcs_write);
858
859 /**
860  * mipi_dsi_dcs_read() - send DCS read request command
861  * @dsi: DSI peripheral device
862  * @cmd: DCS command
863  * @data: buffer in which to receive data
864  * @len: size of receive buffer
865  *
866  * Return: The number of bytes read or a negative error code on failure.
867  */
868 ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data,
869                           size_t len)
870 {
871         struct mipi_dsi_msg msg = {
872                 .channel = dsi->channel,
873                 .type = MIPI_DSI_DCS_READ,
874                 .tx_buf = &cmd,
875                 .tx_len = 1,
876                 .rx_buf = data,
877                 .rx_len = len
878         };
879
880         return mipi_dsi_device_transfer(dsi, &msg);
881 }
882 EXPORT_SYMBOL(mipi_dsi_dcs_read);
883
884 /**
885  * mipi_dsi_dcs_nop() - send DCS nop packet
886  * @dsi: DSI peripheral device
887  *
888  * Return: 0 on success or a negative error code on failure.
889  */
890 int mipi_dsi_dcs_nop(struct mipi_dsi_device *dsi)
891 {
892         ssize_t err;
893
894         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_NOP, NULL, 0);
895         if (err < 0)
896                 return err;
897
898         return 0;
899 }
900 EXPORT_SYMBOL(mipi_dsi_dcs_nop);
901
902 /**
903  * mipi_dsi_dcs_soft_reset() - perform a software reset of the display module
904  * @dsi: DSI peripheral device
905  *
906  * Return: 0 on success or a negative error code on failure.
907  */
908 int mipi_dsi_dcs_soft_reset(struct mipi_dsi_device *dsi)
909 {
910         ssize_t err;
911
912         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SOFT_RESET, NULL, 0);
913         if (err < 0)
914                 return err;
915
916         return 0;
917 }
918 EXPORT_SYMBOL(mipi_dsi_dcs_soft_reset);
919
920 /**
921  * mipi_dsi_dcs_get_power_mode() - query the display module's current power
922  *    mode
923  * @dsi: DSI peripheral device
924  * @mode: return location for the current power mode
925  *
926  * Return: 0 on success or a negative error code on failure.
927  */
928 int mipi_dsi_dcs_get_power_mode(struct mipi_dsi_device *dsi, u8 *mode)
929 {
930         ssize_t err;
931
932         err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_POWER_MODE, mode,
933                                 sizeof(*mode));
934         if (err <= 0) {
935                 if (err == 0)
936                         err = -ENODATA;
937
938                 return err;
939         }
940
941         return 0;
942 }
943 EXPORT_SYMBOL(mipi_dsi_dcs_get_power_mode);
944
945 /**
946  * mipi_dsi_dcs_get_pixel_format() - gets the pixel format for the RGB image
947  *    data used by the interface
948  * @dsi: DSI peripheral device
949  * @format: return location for the pixel format
950  *
951  * Return: 0 on success or a negative error code on failure.
952  */
953 int mipi_dsi_dcs_get_pixel_format(struct mipi_dsi_device *dsi, u8 *format)
954 {
955         ssize_t err;
956
957         err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_PIXEL_FORMAT, format,
958                                 sizeof(*format));
959         if (err <= 0) {
960                 if (err == 0)
961                         err = -ENODATA;
962
963                 return err;
964         }
965
966         return 0;
967 }
968 EXPORT_SYMBOL(mipi_dsi_dcs_get_pixel_format);
969
970 /**
971  * mipi_dsi_dcs_enter_sleep_mode() - disable all unnecessary blocks inside the
972  *    display module except interface communication
973  * @dsi: DSI peripheral device
974  *
975  * Return: 0 on success or a negative error code on failure.
976  */
977 int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi)
978 {
979         ssize_t err;
980
981         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_ENTER_SLEEP_MODE, NULL, 0);
982         if (err < 0)
983                 return err;
984
985         return 0;
986 }
987 EXPORT_SYMBOL(mipi_dsi_dcs_enter_sleep_mode);
988
989 /**
990  * mipi_dsi_dcs_exit_sleep_mode() - enable all blocks inside the display
991  *    module
992  * @dsi: DSI peripheral device
993  *
994  * Return: 0 on success or a negative error code on failure.
995  */
996 int mipi_dsi_dcs_exit_sleep_mode(struct mipi_dsi_device *dsi)
997 {
998         ssize_t err;
999
1000         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_EXIT_SLEEP_MODE, NULL, 0);
1001         if (err < 0)
1002                 return err;
1003
1004         return 0;
1005 }
1006 EXPORT_SYMBOL(mipi_dsi_dcs_exit_sleep_mode);
1007
1008 /**
1009  * mipi_dsi_dcs_set_display_off() - stop displaying the image data on the
1010  *    display device
1011  * @dsi: DSI peripheral device
1012  *
1013  * Return: 0 on success or a negative error code on failure.
1014  */
1015 int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi)
1016 {
1017         ssize_t err;
1018
1019         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_OFF, NULL, 0);
1020         if (err < 0)
1021                 return err;
1022
1023         return 0;
1024 }
1025 EXPORT_SYMBOL(mipi_dsi_dcs_set_display_off);
1026
1027 /**
1028  * mipi_dsi_dcs_set_display_on() - start displaying the image data on the
1029  *    display device
1030  * @dsi: DSI peripheral device
1031  *
1032  * Return: 0 on success or a negative error code on failure
1033  */
1034 int mipi_dsi_dcs_set_display_on(struct mipi_dsi_device *dsi)
1035 {
1036         ssize_t err;
1037
1038         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_ON, NULL, 0);
1039         if (err < 0)
1040                 return err;
1041
1042         return 0;
1043 }
1044 EXPORT_SYMBOL(mipi_dsi_dcs_set_display_on);
1045
1046 /**
1047  * mipi_dsi_dcs_set_column_address() - define the column extent of the frame
1048  *    memory accessed by the host processor
1049  * @dsi: DSI peripheral device
1050  * @start: first column of frame memory
1051  * @end: last column of frame memory
1052  *
1053  * Return: 0 on success or a negative error code on failure.
1054  */
1055 int mipi_dsi_dcs_set_column_address(struct mipi_dsi_device *dsi, u16 start,
1056                                     u16 end)
1057 {
1058         u8 payload[4] = { start >> 8, start & 0xff, end >> 8, end & 0xff };
1059         ssize_t err;
1060
1061         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_COLUMN_ADDRESS, payload,
1062                                  sizeof(payload));
1063         if (err < 0)
1064                 return err;
1065
1066         return 0;
1067 }
1068 EXPORT_SYMBOL(mipi_dsi_dcs_set_column_address);
1069
1070 /**
1071  * mipi_dsi_dcs_set_page_address() - define the page extent of the frame
1072  *    memory accessed by the host processor
1073  * @dsi: DSI peripheral device
1074  * @start: first page of frame memory
1075  * @end: last page of frame memory
1076  *
1077  * Return: 0 on success or a negative error code on failure.
1078  */
1079 int mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start,
1080                                   u16 end)
1081 {
1082         u8 payload[4] = { start >> 8, start & 0xff, end >> 8, end & 0xff };
1083         ssize_t err;
1084
1085         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_PAGE_ADDRESS, payload,
1086                                  sizeof(payload));
1087         if (err < 0)
1088                 return err;
1089
1090         return 0;
1091 }
1092 EXPORT_SYMBOL(mipi_dsi_dcs_set_page_address);
1093
1094 /**
1095  * mipi_dsi_dcs_set_tear_off() - turn off the display module's Tearing Effect
1096  *    output signal on the TE signal line
1097  * @dsi: DSI peripheral device
1098  *
1099  * Return: 0 on success or a negative error code on failure
1100  */
1101 int mipi_dsi_dcs_set_tear_off(struct mipi_dsi_device *dsi)
1102 {
1103         ssize_t err;
1104
1105         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_OFF, NULL, 0);
1106         if (err < 0)
1107                 return err;
1108
1109         return 0;
1110 }
1111 EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_off);
1112
1113 /**
1114  * mipi_dsi_dcs_set_tear_on() - turn on the display module's Tearing Effect
1115  *    output signal on the TE signal line.
1116  * @dsi: DSI peripheral device
1117  * @mode: the Tearing Effect Output Line mode
1118  *
1119  * Return: 0 on success or a negative error code on failure
1120  */
1121 int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi,
1122                              enum mipi_dsi_dcs_tear_mode mode)
1123 {
1124         u8 value = mode;
1125         ssize_t err;
1126
1127         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_ON, &value,
1128                                  sizeof(value));
1129         if (err < 0)
1130                 return err;
1131
1132         return 0;
1133 }
1134 EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on);
1135
1136 /**
1137  * mipi_dsi_dcs_set_pixel_format() - sets the pixel format for the RGB image
1138  *    data used by the interface
1139  * @dsi: DSI peripheral device
1140  * @format: pixel format
1141  *
1142  * Return: 0 on success or a negative error code on failure.
1143  */
1144 int mipi_dsi_dcs_set_pixel_format(struct mipi_dsi_device *dsi, u8 format)
1145 {
1146         ssize_t err;
1147
1148         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_PIXEL_FORMAT, &format,
1149                                  sizeof(format));
1150         if (err < 0)
1151                 return err;
1152
1153         return 0;
1154 }
1155 EXPORT_SYMBOL(mipi_dsi_dcs_set_pixel_format);
1156
1157 /**
1158  * mipi_dsi_dcs_set_tear_scanline() - set the scanline to use as trigger for
1159  *    the Tearing Effect output signal of the display module
1160  * @dsi: DSI peripheral device
1161  * @scanline: scanline to use as trigger
1162  *
1163  * Return: 0 on success or a negative error code on failure
1164  */
1165 int mipi_dsi_dcs_set_tear_scanline(struct mipi_dsi_device *dsi, u16 scanline)
1166 {
1167         u8 payload[2] = { scanline >> 8, scanline & 0xff };
1168         ssize_t err;
1169
1170         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_TEAR_SCANLINE, payload,
1171                                  sizeof(payload));
1172         if (err < 0)
1173                 return err;
1174
1175         return 0;
1176 }
1177 EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_scanline);
1178
1179 /**
1180  * mipi_dsi_dcs_set_display_brightness() - sets the brightness value of the
1181  *    display
1182  * @dsi: DSI peripheral device
1183  * @brightness: brightness value
1184  *
1185  * Return: 0 on success or a negative error code on failure.
1186  */
1187 int mipi_dsi_dcs_set_display_brightness(struct mipi_dsi_device *dsi,
1188                                         u16 brightness)
1189 {
1190         u8 payload[2] = { brightness & 0xff, brightness >> 8 };
1191         ssize_t err;
1192
1193         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,
1194                                  payload, sizeof(payload));
1195         if (err < 0)
1196                 return err;
1197
1198         return 0;
1199 }
1200 EXPORT_SYMBOL(mipi_dsi_dcs_set_display_brightness);
1201
1202 /**
1203  * mipi_dsi_dcs_get_display_brightness() - gets the current brightness value
1204  *    of the display
1205  * @dsi: DSI peripheral device
1206  * @brightness: brightness value
1207  *
1208  * Return: 0 on success or a negative error code on failure.
1209  */
1210 int mipi_dsi_dcs_get_display_brightness(struct mipi_dsi_device *dsi,
1211                                         u16 *brightness)
1212 {
1213         ssize_t err;
1214
1215         err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_DISPLAY_BRIGHTNESS,
1216                                 brightness, sizeof(*brightness));
1217         if (err <= 0) {
1218                 if (err == 0)
1219                         err = -ENODATA;
1220
1221                 return err;
1222         }
1223
1224         return 0;
1225 }
1226 EXPORT_SYMBOL(mipi_dsi_dcs_get_display_brightness);
1227
1228 /**
1229  * mipi_dsi_dcs_set_display_brightness_large() - sets the 16-bit brightness value
1230  *    of the display
1231  * @dsi: DSI peripheral device
1232  * @brightness: brightness value
1233  *
1234  * Return: 0 on success or a negative error code on failure.
1235  */
1236 int mipi_dsi_dcs_set_display_brightness_large(struct mipi_dsi_device *dsi,
1237                                              u16 brightness)
1238 {
1239         u8 payload[2] = { brightness >> 8, brightness & 0xff };
1240         ssize_t err;
1241
1242         err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,
1243                                  payload, sizeof(payload));
1244         if (err < 0)
1245                 return err;
1246
1247         return 0;
1248 }
1249 EXPORT_SYMBOL(mipi_dsi_dcs_set_display_brightness_large);
1250
1251 /**
1252  * mipi_dsi_dcs_get_display_brightness_large() - gets the current 16-bit
1253  *    brightness value of the display
1254  * @dsi: DSI peripheral device
1255  * @brightness: brightness value
1256  *
1257  * Return: 0 on success or a negative error code on failure.
1258  */
1259 int mipi_dsi_dcs_get_display_brightness_large(struct mipi_dsi_device *dsi,
1260                                              u16 *brightness)
1261 {
1262         u8 brightness_be[2];
1263         ssize_t err;
1264
1265         err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_DISPLAY_BRIGHTNESS,
1266                                 brightness_be, sizeof(brightness_be));
1267         if (err <= 0) {
1268                 if (err == 0)
1269                         err = -ENODATA;
1270
1271                 return err;
1272         }
1273
1274         *brightness = (brightness_be[0] << 8) | brightness_be[1];
1275
1276         return 0;
1277 }
1278 EXPORT_SYMBOL(mipi_dsi_dcs_get_display_brightness_large);
1279
1280 static int mipi_dsi_drv_probe(struct device *dev)
1281 {
1282         struct mipi_dsi_driver *drv = to_mipi_dsi_driver(dev->driver);
1283         struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
1284
1285         return drv->probe(dsi);
1286 }
1287
1288 static int mipi_dsi_drv_remove(struct device *dev)
1289 {
1290         struct mipi_dsi_driver *drv = to_mipi_dsi_driver(dev->driver);
1291         struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
1292
1293         drv->remove(dsi);
1294
1295         return 0;
1296 }
1297
1298 static void mipi_dsi_drv_shutdown(struct device *dev)
1299 {
1300         struct mipi_dsi_driver *drv = to_mipi_dsi_driver(dev->driver);
1301         struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
1302
1303         drv->shutdown(dsi);
1304 }
1305
1306 /**
1307  * mipi_dsi_driver_register_full() - register a driver for DSI devices
1308  * @drv: DSI driver structure
1309  * @owner: owner module
1310  *
1311  * Return: 0 on success or a negative error code on failure.
1312  */
1313 int mipi_dsi_driver_register_full(struct mipi_dsi_driver *drv,
1314                                   struct module *owner)
1315 {
1316         drv->driver.bus = &mipi_dsi_bus_type;
1317         drv->driver.owner = owner;
1318
1319         if (drv->probe)
1320                 drv->driver.probe = mipi_dsi_drv_probe;
1321         if (drv->remove)
1322                 drv->driver.remove = mipi_dsi_drv_remove;
1323         if (drv->shutdown)
1324                 drv->driver.shutdown = mipi_dsi_drv_shutdown;
1325
1326         return driver_register(&drv->driver);
1327 }
1328 EXPORT_SYMBOL(mipi_dsi_driver_register_full);
1329
1330 /**
1331  * mipi_dsi_driver_unregister() - unregister a driver for DSI devices
1332  * @drv: DSI driver structure
1333  *
1334  * Return: 0 on success or a negative error code on failure.
1335  */
1336 void mipi_dsi_driver_unregister(struct mipi_dsi_driver *drv)
1337 {
1338         driver_unregister(&drv->driver);
1339 }
1340 EXPORT_SYMBOL(mipi_dsi_driver_unregister);
1341
1342 static int __init mipi_dsi_bus_init(void)
1343 {
1344         return bus_register(&mipi_dsi_bus_type);
1345 }
1346 postcore_initcall(mipi_dsi_bus_init);
1347
1348 MODULE_AUTHOR("Andrzej Hajda <a.hajda@samsung.com>");
1349 MODULE_DESCRIPTION("MIPI DSI Bus");
1350 MODULE_LICENSE("GPL and additional rights");