Message ID | 1340805896-28731-1-git-send-email-jaswinder.singh@linaro.org |
---|---|
State | Accepted |
Commit | 3a5383a2373fd5bc5ebdd781c8ac89ab5d0cb8a4 |
Headers | show |
On Wed, 2012-06-27 at 19:34 +0530, jaswinder.singh@linaro.org wrote: > From: Jassi Brar <jaswinder.singh@linaro.org> > > State change of HDMI PHY could potentially take many millisecs, we can do > better by protecting things in hdmi_set_phy_pwr() with a mutex rather than > a spin_lock_irqsave. > > Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org> > --- > drivers/video/omap2/dss/hdmi.c | 1 + > drivers/video/omap2/dss/ti_hdmi.h | 1 + > drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c | 6 ++---- > 3 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c > index 8195c71..0738090 100644 > --- a/drivers/video/omap2/dss/hdmi.c > +++ b/drivers/video/omap2/dss/hdmi.c > @@ -758,6 +758,7 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev) > hdmi.ip_data.core_av_offset = HDMI_CORE_AV; > hdmi.ip_data.pll_offset = HDMI_PLLCTRL; > hdmi.ip_data.phy_offset = HDMI_PHY; > + mutex_init(&hdmi.ip_data.lock); > > hdmi_panel_init(); > > diff --git a/drivers/video/omap2/dss/ti_hdmi.h b/drivers/video/omap2/dss/ti_hdmi.h > index d174ca1..cc292b8 100644 > --- a/drivers/video/omap2/dss/ti_hdmi.h > +++ b/drivers/video/omap2/dss/ti_hdmi.h > @@ -177,6 +177,7 @@ struct hdmi_ip_data { > > /* ti_hdmi_4xxx_ip private data. These should be in a separate struct */ > int hpd_gpio; > + struct mutex lock; > }; > int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data); > void ti_hdmi_4xxx_phy_disable(struct hdmi_ip_data *ip_data); > diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c > index 3fa3d98..04acca9 100644 > --- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c > +++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c > @@ -238,10 +238,8 @@ static int hdmi_check_hpd_state(struct hdmi_ip_data *ip_data) > unsigned long flags; > bool hpd; > int r; > - /* this should be in ti_hdmi_4xxx_ip private data */ > - static DEFINE_SPINLOCK(phy_tx_lock); > > - spin_lock_irqsave(&phy_tx_lock, flags); > + mutex_lock(&ip_data->lock); > > hpd = gpio_get_value(ip_data->hpd_gpio); > > @@ -257,7 +255,7 @@ static int hdmi_check_hpd_state(struct hdmi_ip_data *ip_data) > } > > err: > - spin_unlock_irqrestore(&phy_tx_lock, flags); > + mutex_unlock(&ip_data->lock); > return r; This introduced a new warning: drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c: In function 'hdmi_check_hpd_state': drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c:238:16: warning: unused variable 'flags' I fixed that. I'll apply this and the first patch, as I don't think there are any questions about these. Tomi
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index 8195c71..0738090 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c @@ -758,6 +758,7 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev) hdmi.ip_data.core_av_offset = HDMI_CORE_AV; hdmi.ip_data.pll_offset = HDMI_PLLCTRL; hdmi.ip_data.phy_offset = HDMI_PHY; + mutex_init(&hdmi.ip_data.lock); hdmi_panel_init(); diff --git a/drivers/video/omap2/dss/ti_hdmi.h b/drivers/video/omap2/dss/ti_hdmi.h index d174ca1..cc292b8 100644 --- a/drivers/video/omap2/dss/ti_hdmi.h +++ b/drivers/video/omap2/dss/ti_hdmi.h @@ -177,6 +177,7 @@ struct hdmi_ip_data { /* ti_hdmi_4xxx_ip private data. These should be in a separate struct */ int hpd_gpio; + struct mutex lock; }; int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data); void ti_hdmi_4xxx_phy_disable(struct hdmi_ip_data *ip_data); diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c index 3fa3d98..04acca9 100644 --- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c +++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c @@ -238,10 +238,8 @@ static int hdmi_check_hpd_state(struct hdmi_ip_data *ip_data) unsigned long flags; bool hpd; int r; - /* this should be in ti_hdmi_4xxx_ip private data */ - static DEFINE_SPINLOCK(phy_tx_lock); - spin_lock_irqsave(&phy_tx_lock, flags); + mutex_lock(&ip_data->lock); hpd = gpio_get_value(ip_data->hpd_gpio); @@ -257,7 +255,7 @@ static int hdmi_check_hpd_state(struct hdmi_ip_data *ip_data) } err: - spin_unlock_irqrestore(&phy_tx_lock, flags); + mutex_unlock(&ip_data->lock); return r; }