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:
Коммит
4fb2ac6ebe
|
@ -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 @@ done:
|
||||||
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 @@ done:
|
||||||
* 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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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_
|
||||||
|
|
Загрузка…
Ссылка в новой задаче