drm: Miscellaneous fixes for v3.19-rc1

This is a small collection of fixes that I've been carrying around for a
 while now. Many of these have been posted and reviewed or acked. The few
 that haven't I deemed too trivial to bother.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABAgAGBQJUZKenAAoJEN0jrNd/PrOhNwkQAJTGxhol/k0Vj+P+HVj+MROU
 9EEw67mh/c2Y4zQxEmWRE/rHdIgoz4zPL5hoJLLjPmorvKil6BIfURUybxYu9n3b
 MrunoA7adxvL+Uce+XMkuvWUE2fxFNaEwU+FT66Ib+Lo8A25FZXBqo125/RmhAHZ
 EQKcr0MBH76jybYoyB1H1pf/O3i6qODmh3kXT4Fved3jf5mZNPl5wgCSSr/4ilOZ
 wx3pzG3BvIrsyvGF6Q0oAjDEbaBTOhglfAvPFhC16cfhtPJMzVvx6v/abtipMjRv
 pUY3t96BvL1pyszcEc/ykjDX/ODlY00uOe1GgRSSXS/bThF0HJP14rTpjO+6ycON
 rap17o2feRuK3c2NzLMqv4bjkaNF/ut+2YnByulJWnpg1dDjIpJOzJ6Heep5D6+H
 lV5QP0B9LGI4718le2tv5hkH0NnQygiyRlACRzLBpq9gnXuSoSZYxjo6SuVid1X8
 Ebs+QKNoTl1NEYeEvT/CnC552MdWzntcNjE9SA1yj0RgrIS87x8bmXqh/zAwa2dI
 1Lq1wZ965ruDUPCGrd6jE8JiiEEXJjJr0y6zA4LBnR+OvmR/2GN7KCwjX+jwBthq
 9dyO9YEnxSXT/dFEUumx3F4ZKcPUntT61pT6ZblIljiJ5vw6SegDXdWDc+eZ4QyD
 y2YyxRL+KxPftkeyfU4j
 =OUaP
 -----END PGP SIGNATURE-----

Merge tag 'drm/fixes/for-3.19-rc1' of git://people.freedesktop.org/~tagr/linux into drm-next

drm: Miscellaneous fixes for v3.19-rc1

This is a small collection of fixes that I've been carrying around for a
while now. Many of these have been posted and reviewed or acked. The few
that haven't I deemed too trivial to bother.

* tag 'drm/fixes/for-3.19-rc1' of git://people.freedesktop.org/~tagr/linux:
  video/hdmi: Relicense header under MIT license
  drm/gma500: mdfld: Reuse video/mipi_display.h
  drm: Make drm_mode_create_tv_properties() signature consistent
  drm: Implement drm_get_pci_dev() dummy for !PCI
  drm/prime: Use unsigned type for number of pages
  drm/gem: Fix typo in kerneldoc
  drm: Use const data when creating blob properties
  drm: Use size_t for blob property sizes
This commit is contained in:
Dave Airlie 2014-11-15 09:37:20 +10:00
commit 4fb2ac6ebe
10 changed files with 88 additions and 79 deletions

View file

@ -1386,12 +1386,13 @@ EXPORT_SYMBOL(drm_mode_create_dvi_i_properties);
* responsible for allocating a list of format names and passing them to * responsible for allocating a list of format names and passing them to
* this routine. * this routine.
*/ */
int drm_mode_create_tv_properties(struct drm_device *dev, int num_modes, int drm_mode_create_tv_properties(struct drm_device *dev,
unsigned int num_modes,
char *modes[]) char *modes[])
{ {
struct drm_property *tv_selector; struct drm_property *tv_selector;
struct drm_property *tv_subconnector; struct drm_property *tv_subconnector;
int i; unsigned int i;
if (dev->mode_config.tv_select_subconnector_property) if (dev->mode_config.tv_select_subconnector_property)
return 0; return 0;
@ -2260,7 +2261,7 @@ static int __setplane_internal(struct drm_plane *plane,
{ {
int ret = 0; int ret = 0;
unsigned int fb_width, fb_height; unsigned int fb_width, fb_height;
int i; unsigned int i;
/* No fb means shut it down */ /* No fb means shut it down */
if (!fb) { if (!fb) {
@ -3911,8 +3912,9 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
return ret; return ret;
} }
static struct drm_property_blob *drm_property_create_blob(struct drm_device *dev, int length, static struct drm_property_blob *
void *data) drm_property_create_blob(struct drm_device *dev, size_t length,
const void *data)
{ {
struct drm_property_blob *blob; struct drm_property_blob *blob;
int ret; int ret;
@ -4006,11 +4008,11 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
* Zero on success, errno on failure. * Zero on success, errno on failure.
*/ */
int drm_mode_connector_set_path_property(struct drm_connector *connector, int drm_mode_connector_set_path_property(struct drm_connector *connector,
char *path) const char *path)
{ {
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
int ret, size; size_t size = strlen(path) + 1;
size = strlen(path) + 1; int ret;
connector->path_blob_ptr = drm_property_create_blob(connector->dev, connector->path_blob_ptr = drm_property_create_blob(connector->dev,
size, path); size, path);
@ -4036,10 +4038,11 @@ EXPORT_SYMBOL(drm_mode_connector_set_path_property);
* Zero on success, errno on failure. * Zero on success, errno on failure.
*/ */
int drm_mode_connector_update_edid_property(struct drm_connector *connector, int drm_mode_connector_update_edid_property(struct drm_connector *connector,
struct edid *edid) const struct edid *edid)
{ {
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
int ret, size; size_t size;
int ret;
/* ignore requests to set edid when overridden */ /* ignore requests to set edid when overridden */
if (connector->override_edid) if (connector->override_edid)

View file

@ -188,7 +188,7 @@ drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp)
} }
/** /**
* drm_gem_object_free - release resources bound to userspace handles * drm_gem_object_handle_free - release resources bound to userspace handles
* @obj: GEM object to clean up. * @obj: GEM object to clean up.
* *
* Called after the last handle to the object has been closed * Called after the last handle to the object has been closed

View file

@ -669,7 +669,7 @@ int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
* the driver is responsible for mapping the pages into the * the driver is responsible for mapping the pages into the
* importers address space for use with dma_buf itself. * importers address space for use with dma_buf itself.
*/ */
struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages) struct sg_table *drm_prime_pages_to_sg(struct page **pages, unsigned int nr_pages)
{ {
struct sg_table *sg = NULL; struct sg_table *sg = NULL;
int ret; int ret;

View file

@ -25,6 +25,7 @@
*/ */
#include <linux/freezer.h> #include <linux/freezer.h>
#include <video/mipi_display.h>
#include "mdfld_dsi_output.h" #include "mdfld_dsi_output.h"
#include "mdfld_dsi_pkg_sender.h" #include "mdfld_dsi_pkg_sender.h"
@ -32,20 +33,6 @@
#define MDFLD_DSI_READ_MAX_COUNT 5000 #define MDFLD_DSI_READ_MAX_COUNT 5000
enum data_type {
DSI_DT_GENERIC_SHORT_WRITE_0 = 0x03,
DSI_DT_GENERIC_SHORT_WRITE_1 = 0x13,
DSI_DT_GENERIC_SHORT_WRITE_2 = 0x23,
DSI_DT_GENERIC_READ_0 = 0x04,
DSI_DT_GENERIC_READ_1 = 0x14,
DSI_DT_GENERIC_READ_2 = 0x24,
DSI_DT_GENERIC_LONG_WRITE = 0x29,
DSI_DT_DCS_SHORT_WRITE_0 = 0x05,
DSI_DT_DCS_SHORT_WRITE_1 = 0x15,
DSI_DT_DCS_READ = 0x06,
DSI_DT_DCS_LONG_WRITE = 0x39,
};
enum { enum {
MDFLD_DSI_PANEL_MODE_SLEEP = 0x1, MDFLD_DSI_PANEL_MODE_SLEEP = 0x1,
}; };
@ -321,9 +308,9 @@ static int send_pkg_prepare(struct mdfld_dsi_pkg_sender *sender, u8 data_type,
u8 cmd; u8 cmd;
switch (data_type) { switch (data_type) {
case DSI_DT_DCS_SHORT_WRITE_0: case MIPI_DSI_DCS_SHORT_WRITE:
case DSI_DT_DCS_SHORT_WRITE_1: case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
case DSI_DT_DCS_LONG_WRITE: case MIPI_DSI_DCS_LONG_WRITE:
cmd = *data; cmd = *data;
break; break;
default: default:
@ -334,12 +321,12 @@ static int send_pkg_prepare(struct mdfld_dsi_pkg_sender *sender, u8 data_type,
sender->status = MDFLD_DSI_PKG_SENDER_BUSY; sender->status = MDFLD_DSI_PKG_SENDER_BUSY;
/*wait for 120 milliseconds in case exit_sleep_mode just be sent*/ /*wait for 120 milliseconds in case exit_sleep_mode just be sent*/
if (unlikely(cmd == DCS_ENTER_SLEEP_MODE)) { if (unlikely(cmd == MIPI_DCS_ENTER_SLEEP_MODE)) {
/*TODO: replace it with msleep later*/ /*TODO: replace it with msleep later*/
mdelay(120); mdelay(120);
} }
if (unlikely(cmd == DCS_EXIT_SLEEP_MODE)) { if (unlikely(cmd == MIPI_DCS_EXIT_SLEEP_MODE)) {
/*TODO: replace it with msleep later*/ /*TODO: replace it with msleep later*/
mdelay(120); mdelay(120);
} }
@ -352,9 +339,9 @@ static int send_pkg_done(struct mdfld_dsi_pkg_sender *sender, u8 data_type,
u8 cmd; u8 cmd;
switch (data_type) { switch (data_type) {
case DSI_DT_DCS_SHORT_WRITE_0: case MIPI_DSI_DCS_SHORT_WRITE:
case DSI_DT_DCS_SHORT_WRITE_1: case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
case DSI_DT_DCS_LONG_WRITE: case MIPI_DSI_DCS_LONG_WRITE:
cmd = *data; cmd = *data;
break; break;
default: default:
@ -362,15 +349,15 @@ static int send_pkg_done(struct mdfld_dsi_pkg_sender *sender, u8 data_type,
} }
/*update panel status*/ /*update panel status*/
if (unlikely(cmd == DCS_ENTER_SLEEP_MODE)) { if (unlikely(cmd == MIPI_DCS_ENTER_SLEEP_MODE)) {
sender->panel_mode |= MDFLD_DSI_PANEL_MODE_SLEEP; sender->panel_mode |= MDFLD_DSI_PANEL_MODE_SLEEP;
/*TODO: replace it with msleep later*/ /*TODO: replace it with msleep later*/
mdelay(120); mdelay(120);
} else if (unlikely(cmd == DCS_EXIT_SLEEP_MODE)) { } else if (unlikely(cmd == MIPI_DCS_EXIT_SLEEP_MODE)) {
sender->panel_mode &= ~MDFLD_DSI_PANEL_MODE_SLEEP; sender->panel_mode &= ~MDFLD_DSI_PANEL_MODE_SLEEP;
/*TODO: replace it with msleep later*/ /*TODO: replace it with msleep later*/
mdelay(120); mdelay(120);
} else if (unlikely(cmd == DCS_SOFT_RESET)) { } else if (unlikely(cmd == MIPI_DCS_SOFT_RESET)) {
/*TODO: replace it with msleep later*/ /*TODO: replace it with msleep later*/
mdelay(5); mdelay(5);
} }
@ -405,19 +392,19 @@ static int send_pkg(struct mdfld_dsi_pkg_sender *sender, u8 data_type,
} }
switch (data_type) { switch (data_type) {
case DSI_DT_GENERIC_SHORT_WRITE_0: case MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM:
case DSI_DT_GENERIC_SHORT_WRITE_1: case MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM:
case DSI_DT_GENERIC_SHORT_WRITE_2: case MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM:
case DSI_DT_GENERIC_READ_0: case MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM:
case DSI_DT_GENERIC_READ_1: case MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM:
case DSI_DT_GENERIC_READ_2: case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:
case DSI_DT_DCS_SHORT_WRITE_0: case MIPI_DSI_DCS_SHORT_WRITE:
case DSI_DT_DCS_SHORT_WRITE_1: case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
case DSI_DT_DCS_READ: case MIPI_DSI_DCS_READ:
ret = send_short_pkg(sender, data_type, data[0], data[1], hs); ret = send_short_pkg(sender, data_type, data[0], data[1], hs);
break; break;
case DSI_DT_GENERIC_LONG_WRITE: case MIPI_DSI_GENERIC_LONG_WRITE:
case DSI_DT_DCS_LONG_WRITE: case MIPI_DSI_DCS_LONG_WRITE:
ret = send_long_pkg(sender, data_type, data, len, hs); ret = send_long_pkg(sender, data_type, data, len, hs);
break; break;
} }
@ -440,7 +427,7 @@ int mdfld_dsi_send_mcs_long(struct mdfld_dsi_pkg_sender *sender, u8 *data,
} }
spin_lock_irqsave(&sender->lock, flags); spin_lock_irqsave(&sender->lock, flags);
send_pkg(sender, DSI_DT_DCS_LONG_WRITE, data, len, hs); send_pkg(sender, MIPI_DSI_DCS_LONG_WRITE, data, len, hs);
spin_unlock_irqrestore(&sender->lock, flags); spin_unlock_irqrestore(&sender->lock, flags);
return 0; return 0;
@ -461,10 +448,10 @@ int mdfld_dsi_send_mcs_short(struct mdfld_dsi_pkg_sender *sender, u8 cmd,
data[0] = cmd; data[0] = cmd;
if (param_num) { if (param_num) {
data_type = DSI_DT_DCS_SHORT_WRITE_1; data_type = MIPI_DSI_DCS_SHORT_WRITE_PARAM;
data[1] = param; data[1] = param;
} else { } else {
data_type = DSI_DT_DCS_SHORT_WRITE_0; data_type = MIPI_DSI_DCS_SHORT_WRITE;
data[1] = 0; data[1] = 0;
} }
@ -489,17 +476,17 @@ int mdfld_dsi_send_gen_short(struct mdfld_dsi_pkg_sender *sender, u8 param0,
switch (param_num) { switch (param_num) {
case 0: case 0:
data_type = DSI_DT_GENERIC_SHORT_WRITE_0; data_type = MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM;
data[0] = 0; data[0] = 0;
data[1] = 0; data[1] = 0;
break; break;
case 1: case 1:
data_type = DSI_DT_GENERIC_SHORT_WRITE_1; data_type = MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM;
data[0] = param0; data[0] = param0;
data[1] = 0; data[1] = 0;
break; break;
case 2: case 2:
data_type = DSI_DT_GENERIC_SHORT_WRITE_2; data_type = MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM;
data[0] = param0; data[0] = param0;
data[1] = param1; data[1] = param1;
break; break;
@ -523,7 +510,7 @@ int mdfld_dsi_send_gen_long(struct mdfld_dsi_pkg_sender *sender, u8 *data,
} }
spin_lock_irqsave(&sender->lock, flags); spin_lock_irqsave(&sender->lock, flags);
send_pkg(sender, DSI_DT_GENERIC_LONG_WRITE, data, len, hs); send_pkg(sender, MIPI_DSI_GENERIC_LONG_WRITE, data, len, hs);
spin_unlock_irqrestore(&sender->lock, flags); spin_unlock_irqrestore(&sender->lock, flags);
return 0; return 0;
@ -594,7 +581,7 @@ int mdfld_dsi_read_mcs(struct mdfld_dsi_pkg_sender *sender, u8 cmd,
return -EINVAL; return -EINVAL;
} }
return __read_panel_data(sender, DSI_DT_DCS_READ, &cmd, 1, return __read_panel_data(sender, MIPI_DSI_DCS_READ, &cmd, 1,
data, len, hs); data, len, hs);
} }

View file

@ -62,18 +62,6 @@ struct mdfld_dsi_pkg_sender {
u32 mipi_cmd_len_reg; u32 mipi_cmd_len_reg;
}; };
/* DCS definitions */
#define DCS_SOFT_RESET 0x01
#define DCS_ENTER_SLEEP_MODE 0x10
#define DCS_EXIT_SLEEP_MODE 0x11
#define DCS_SET_DISPLAY_OFF 0x28
#define DCS_SET_DISPLAY_ON 0x29
#define DCS_SET_COLUMN_ADDRESS 0x2a
#define DCS_SET_PAGE_ADDRESS 0x2b
#define DCS_WRITE_MEM_START 0x2c
#define DCS_SET_TEAR_OFF 0x34
#define DCS_SET_TEAR_ON 0x35
extern int mdfld_dsi_pkg_sender_init(struct mdfld_dsi_connector *dsi_connector, extern int mdfld_dsi_pkg_sender_init(struct mdfld_dsi_connector *dsi_connector,
int pipe); int pipe);
extern void mdfld_dsi_pkg_sender_destroy(struct mdfld_dsi_pkg_sender *sender); extern void mdfld_dsi_pkg_sender_destroy(struct mdfld_dsi_pkg_sender *sender);

View file

@ -385,7 +385,7 @@ static void intel_connector_remove_from_fbdev(struct intel_connector *connector)
#endif #endif
} }
static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, char *pathprop) static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, const char *pathprop)
{ {
struct intel_dp *intel_dp = container_of(mgr, struct intel_dp, mst_mgr); struct intel_dp *intel_dp = container_of(mgr, struct intel_dp, mst_mgr);
struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);

View file

@ -986,7 +986,7 @@ extern void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages, extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
dma_addr_t *addrs, int max_pages); dma_addr_t *addrs, int max_pages);
extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages); extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, unsigned int nr_pages);
extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
@ -1028,10 +1028,25 @@ void drm_pci_agp_destroy(struct drm_device *dev);
extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver); extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver); extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
#ifdef CONFIG_PCI
extern int drm_get_pci_dev(struct pci_dev *pdev, extern int drm_get_pci_dev(struct pci_dev *pdev,
const struct pci_device_id *ent, const struct pci_device_id *ent,
struct drm_driver *driver); struct drm_driver *driver);
extern int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master); extern int drm_pci_set_busid(struct drm_device *dev, struct drm_master *master);
#else
static inline int drm_get_pci_dev(struct pci_dev *pdev,
const struct pci_device_id *ent,
struct drm_driver *driver)
{
return -ENOSYS;
}
static inline int drm_pci_set_busid(struct drm_device *dev,
struct drm_master *master)
{
return -ENOSYS;
}
#endif
#define DRM_PCIE_SPEED_25 1 #define DRM_PCIE_SPEED_25 1
#define DRM_PCIE_SPEED_50 2 #define DRM_PCIE_SPEED_50 2

View file

@ -197,7 +197,7 @@ struct drm_framebuffer {
struct drm_property_blob { struct drm_property_blob {
struct drm_mode_object base; struct drm_mode_object base;
struct list_head head; struct list_head head;
unsigned int length; size_t length;
unsigned char data[]; unsigned char data[];
}; };
@ -1162,9 +1162,9 @@ extern void drm_mode_config_reset(struct drm_device *dev);
extern void drm_mode_config_cleanup(struct drm_device *dev); extern void drm_mode_config_cleanup(struct drm_device *dev);
extern int drm_mode_connector_set_path_property(struct drm_connector *connector, extern int drm_mode_connector_set_path_property(struct drm_connector *connector,
char *path); const char *path);
extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, extern int drm_mode_connector_update_edid_property(struct drm_connector *connector,
struct edid *edid); const struct edid *edid);
static inline bool drm_property_type_is(struct drm_property *property, static inline bool drm_property_type_is(struct drm_property *property,
uint32_t type) uint32_t type)
@ -1225,8 +1225,9 @@ extern void drm_property_destroy(struct drm_device *dev, struct drm_property *pr
extern int drm_property_add_enum(struct drm_property *property, int index, extern int drm_property_add_enum(struct drm_property *property, int index,
uint64_t value, const char *name); uint64_t value, const char *name);
extern int drm_mode_create_dvi_i_properties(struct drm_device *dev); extern int drm_mode_create_dvi_i_properties(struct drm_device *dev);
extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats, extern int drm_mode_create_tv_properties(struct drm_device *dev,
char *formats[]); unsigned int num_modes,
char *modes[]);
extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); extern int drm_mode_create_scaling_mode_property(struct drm_device *dev);
extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
extern int drm_mode_create_dirty_info_property(struct drm_device *dev); extern int drm_mode_create_dirty_info_property(struct drm_device *dev);

View file

@ -371,7 +371,7 @@ struct drm_dp_sideband_msg_tx {
struct drm_dp_mst_topology_mgr; struct drm_dp_mst_topology_mgr;
struct drm_dp_mst_topology_cbs { struct drm_dp_mst_topology_cbs {
/* create a connector for a port */ /* create a connector for a port */
struct drm_connector *(*add_connector)(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, char *path); struct drm_connector *(*add_connector)(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, const char *path);
void (*destroy_connector)(struct drm_dp_mst_topology_mgr *mgr, void (*destroy_connector)(struct drm_dp_mst_topology_mgr *mgr,
struct drm_connector *connector); struct drm_connector *connector);
void (*hotplug)(struct drm_dp_mst_topology_mgr *mgr); void (*hotplug)(struct drm_dp_mst_topology_mgr *mgr);

View file

@ -1,9 +1,24 @@
/* /*
* Copyright (C) 2012 Avionic Design GmbH * Copyright (C) 2012 Avionic Design GmbH
* *
* This program is free software; you can redistribute it and/or modify * Permission is hereby granted, free of charge, to any person obtaining a
* it under the terms of the GNU General Public License version 2 as * copy of this software and associated documentation files (the "Software"),
* published by the Free Software Foundation. * to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sub license,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/ */
#ifndef __LINUX_HDMI_H_ #ifndef __LINUX_HDMI_H_