hdmi: use dps->lock replace of hdmi->lock.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
This commit is contained in:
Zheng Yang
2015-07-20 14:52:13 +08:00
parent 27a0c1c3be
commit 54ee81fa6d
3 changed files with 52 additions and 31 deletions

View File

@@ -162,16 +162,20 @@ static ssize_t display_store_mode(struct device *dev,
struct fb_videomode *mode;
size_t i;
mutex_lock(&dsp->lock);
if (!memcmp(buf, "auto", 4)) {
if (dsp->ops && dsp->ops->setmode)
dsp->ops->setmode(dsp, NULL);
mutex_unlock(&dsp->lock);
return count;
}
if (dsp->ops && dsp->ops->getmodelist) {
if (dsp->ops && dsp->ops->getmodelist) {
if (dsp->ops->getmodelist(dsp, &modelist))
if (dsp->ops->getmodelist(dsp, &modelist)) {
mutex_unlock(&dsp->lock);
return -EINVAL;
}
}
list_for_each(pos, modelist) {
display_modelist = list_entry(pos,
@@ -182,10 +186,12 @@ static ssize_t display_store_mode(struct device *dev,
if (strncmp(mstr, buf, max(count, i)) == 0) {
if (dsp->ops && dsp->ops->setmode)
dsp->ops->setmode(dsp, mode);
mutex_unlock(&dsp->lock);
return count;
}
}
}
mutex_unlock(&dsp->lock);
return -EINVAL;
}
@@ -251,17 +257,24 @@ static ssize_t display_show_3dmode(struct device *dev,
char mode_str[128];
int mode_strlen, format_3d;
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->getmodelist) {
if (dsp->ops->getmodelist(dsp, &modelist))
if (dsp->ops->getmodelist(dsp, &modelist)) {
mutex_unlock(&dsp->lock);
return -EINVAL;
}
} else {
mutex_unlock(&dsp->lock);
return 0;
}
if (dsp->ops && dsp->ops->getmode) {
if (dsp->ops->getmode(dsp, &mode))
if (dsp->ops->getmode(dsp, &mode)) {
mutex_unlock(&dsp->lock);
return -EINVAL;
}
} else {
mutex_unlock(&dsp->lock);
return 0;
}
@@ -295,6 +308,7 @@ static ssize_t display_show_3dmode(struct device *dev,
i += snprintf(buf+i, PAGE_SIZE, "%s,%d\n",
mode_str, format_3d);
}
mutex_unlock(&dsp->lock);
return i;
}
@@ -305,11 +319,14 @@ static ssize_t display_store_3dmode(struct device *dev,
struct rk_display_device *dsp = dev_get_drvdata(dev);
int mode;
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->set3dmode) {
if (!kstrtoint(buf, 0, &mode))
dsp->ops->set3dmode(dsp, mode);
mutex_unlock(&dsp->lock);
return count;
}
mutex_unlock(&dsp->lock);
return -EINVAL;
}
@@ -317,11 +334,13 @@ static ssize_t display_show_color(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct rk_display_device *dsp = dev_get_drvdata(dev);
int ret = 0;
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->getcolor)
return dsp->ops->getcolor(dsp, buf);
else
return 0;
ret = dsp->ops->getcolor(dsp, buf);
mutex_unlock(&dsp->lock);
return ret;
}
static ssize_t display_store_color(struct device *dev,
@@ -330,10 +349,14 @@ static ssize_t display_store_color(struct device *dev,
{
struct rk_display_device *dsp = dev_get_drvdata(dev);
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->setcolor) {
if (!dsp->ops->setcolor(dsp, buf, count))
if (!dsp->ops->setcolor(dsp, buf, count)) {
mutex_unlock(&dsp->lock);
return count;
}
}
mutex_unlock(&dsp->lock);
return -EINVAL;
}
@@ -345,11 +368,15 @@ static ssize_t display_show_sinkaudioinfo(struct device *dev,
char audioinfo[200];
int ret = 0;
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->getedidaudioinfo) {
ret = dsp->ops->getedidaudioinfo(dsp, audioinfo, 200);
if (!ret)
if (!ret) {
mutex_unlock(&dsp->lock);
return snprintf(buf, PAGE_SIZE, "%s\n", audioinfo);
}
}
mutex_unlock(&dsp->lock);
return -EINVAL;
}
@@ -360,13 +387,16 @@ static ssize_t display_show_monspecs(struct device *dev,
struct fb_monspecs monspecs;
int ret = 0;
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->getmonspecs) {
ret = dsp->ops->getmonspecs(dsp, &monspecs);
if (!ret) {
mutex_unlock(&dsp->lock);
memcpy(buf, &monspecs, sizeof(struct fb_monspecs));
return sizeof(struct fb_monspecs);
}
}
mutex_unlock(&dsp->lock);
return -EINVAL;
}
@@ -374,26 +404,30 @@ static ssize_t display_show_debug(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct rk_display_device *dsp = dev_get_drvdata(dev);
int ret = -EINVAL;
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->getdebug)
return dsp->ops->getdebug(dsp, buf);
else
return -EINVAL;
ret = dsp->ops->getdebug(dsp, buf);
mutex_unlock(&dsp->lock);
return ret;
}
static ssize_t display_store_debug(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
int cmd;
int cmd, ret = -EINVAL;
struct rk_display_device *dsp = dev_get_drvdata(dev);
mutex_lock(&dsp->lock);
if (dsp->ops && dsp->ops->setdebug) {
if (kstrtoint(buf, 0, &cmd) == 0)
dsp->ops->setdebug(dsp, cmd);
return count;
ret = count;
}
return -EINVAL;
mutex_unlock(&dsp->lock);
return ret;
}
static struct device_attribute display_attrs[] = {

View File

@@ -79,7 +79,6 @@ static void hdmi_wq_set_video(struct hdmi *hdmi)
DBG("%s\n", __func__);
video.vic = hdmi->vic & HDMI_VIC_MASK;
video.sink_hdmi = hdmi->edid.sink_hdmi;
video.format_3d = hdmi->mode_3d;
video.colorimetry = hdmi->colorimetry;
@@ -124,6 +123,7 @@ static void hdmi_wq_set_video(struct hdmi *hdmi)
}
hdmi->colormode_input = video.color_input;
hdmi_set_lcdc(hdmi);
video.vic = hdmi->vic & HDMI_VIC_MASK;
if (hdmi->ops->setvideo)
hdmi->ops->setvideo(hdmi, &video);
}
@@ -260,12 +260,10 @@ static void hdmi_wq_remove(struct hdmi *hdmi)
#ifdef CONFIG_SWITCH
switch_set_state(&(hdmi->switchdev), 0);
#endif
mutex_lock(&hdmi->ddev->lock);
list_for_each_safe(pos, n, &hdmi->edid.modelist) {
list_del(pos);
kfree(pos);
}
mutex_unlock(&hdmi->ddev->lock);
for (i = 0; i < HDMI_MAX_EDID_BLOCK; i++)
kfree(hdmi->edid.raw[i]);
kfree(hdmi->edid.audio);
@@ -290,7 +288,7 @@ static void hdmi_work_queue(struct work_struct *work)
int event = hdmi_w->event;
int hpd = HDMI_HPD_REMOVED;
mutex_lock(&hdmi->lock);
mutex_lock(&hdmi->ddev->lock);
DBG("\nhdmi_work_queue() - evt= %x %d\n",
(event & 0xFF00) >> 8,
@@ -431,7 +429,7 @@ static void hdmi_work_queue(struct work_struct *work)
DBG("\nhdmi_work_queue() - exit evt= %x %d\n",
(event & 0xFF00) >> 8,
event & 0xFF);
mutex_unlock(&hdmi->lock);
mutex_unlock(&hdmi->ddev->lock);
}
struct hdmi *rockchip_hdmi_register(struct hdmi_property *property,

View File

@@ -51,7 +51,6 @@ static int hdmi_set_mode(struct rk_display_device *device,
container_of(mode, struct display_modelist, mode);
int vic = 0;
mutex_lock(&hdmi->lock);
if (mode == NULL) {
hdmi->autoset = 1;
vic = hdmi_find_best_mode(hdmi, 0);
@@ -65,7 +64,6 @@ static int hdmi_set_mode(struct rk_display_device *device,
if (hdmi->hotplug == HDMI_HPD_ACTIVED)
hdmi_submit_work(hdmi, HDMI_SET_VIDEO, 0, NULL);
}
mutex_unlock(&hdmi->lock);
return 0;
}
@@ -100,7 +98,7 @@ static int hdmi_set_3dmode(struct rk_display_device *device, int mode)
if (!hdmi)
return -1;
mutex_lock(&hdmi->lock);
modelist = &hdmi->edid.modelist;
list_for_each(pos, modelist) {
display_modelist =
@@ -110,7 +108,6 @@ static int hdmi_set_3dmode(struct rk_display_device *device, int mode)
else
display_modelist = NULL;
}
mutex_unlock(&hdmi->lock);
if (!display_modelist)
return -1;
@@ -168,7 +165,6 @@ static int hdmi_get_edidaudioinfo(struct rk_display_device *device,
return -1;
memset(audioinfo, 0x00, len);
mutex_lock(&hdmi->lock);
/*printk("hdmi:edid: audio_num: %d\n", hdmi->edid.audio_num);*/
for (i = 0; i < hdmi->edid.audio_num; i++) {
audio = &(hdmi->edid.audio[i]);
@@ -181,7 +177,6 @@ static int hdmi_get_edidaudioinfo(struct rk_display_device *device,
audioinfo[size] = ',';
audioinfo += (size+1);
}
mutex_unlock(&hdmi->lock);
return 0;
}
@@ -190,7 +185,6 @@ static int hdmi_get_color(struct rk_display_device *device, char *buf)
struct hdmi *hdmi = device->priv_data;
int i, mode;
mutex_lock(&hdmi->lock);
mode = (1 << HDMI_COLOR_RGB_0_255);
if (hdmi->edid.sink_hdmi) {
mode |= (1 << HDMI_COLOR_RGB_16_235);
@@ -222,7 +216,6 @@ static int hdmi_get_color(struct rk_display_device *device, char *buf)
"Supported Colorimetry: %d\n", hdmi->edid.colorimetry);
i += snprintf(buf + i, PAGE_SIZE - i,
"Current Colorimetry: %d\n", hdmi->colorimetry);
mutex_unlock(&hdmi->lock);
return i;
}
@@ -306,10 +299,8 @@ static int hdmi_get_monspecs(struct rk_display_device *device,
if (!hdmi)
return -1;
mutex_lock(&hdmi->lock);
if (hdmi->edid.specs)
*monspecs = *(hdmi->edid.specs);
mutex_unlock(&hdmi->lock);
return 0;
}
@@ -532,7 +523,6 @@ static int hdmi_get_debug(struct rk_display_device *device, char *buf)
len += snprintf(buf+len, PAGE_SIZE - len, "EDID status:%s\n",
hdmi->edid.status ? "False" : "Okay");
len += snprintf(buf+len, PAGE_SIZE - len, "Raw Data:");
mutex_lock(&hdmi->lock);
for (i = 0; i < HDMI_MAX_EDID_BLOCK; i++) {
if (!hdmi->edid.raw[i])
break;
@@ -548,7 +538,6 @@ static int hdmi_get_debug(struct rk_display_device *device, char *buf)
len += snprintf(buf+len, PAGE_SIZE, "\n");
if (!hdmi->edid.status)
len += hdmi_show_sink_info(hdmi, buf, len);
mutex_unlock(&hdmi->lock);
return len;
}