aboutsummaryrefslogtreecommitdiff
path: root/lib/driver
diff options
context:
space:
mode:
Diffstat (limited to 'lib/driver')
-rw-r--r--lib/driver/avswitch.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/lib/driver/avswitch.cpp b/lib/driver/avswitch.cpp
index 0fc53da5..1f2765ec 100644
--- a/lib/driver/avswitch.cpp
+++ b/lib/driver/avswitch.cpp
@@ -46,7 +46,14 @@ int eAVSwitch::getVCRSlowBlanking()
int val=0;
if (m_fp_fd >= 0)
{
- if (ioctl(m_fp_fd, FP_IOCTL_GET_VCR, &val) < 0)
+ FILE *f = fopen("/proc/stb/fp/vcr_fns", "r");
+ if (f)
+ {
+ if (fscanf(f, "%d", &val) != 1)
+ eDebug("read /proc/stb/fp/vcr_fns failed!! (%m)");
+ fclose(f);
+ }
+ else if (ioctl(m_fp_fd, FP_IOCTL_GET_VCR, &val) < 0)
eDebug("FP_GET_VCR failed (%m)");
}
return val;
@@ -61,11 +68,24 @@ void eAVSwitch::fp_event(int what)
}
else
{
- int val = FP_EVENT_VCR_SB_CHANGED; // ask only for this event
- if (ioctl(m_fp_fd, FP_IOCTL_GET_EVENT, &val) < 0)
- eDebug("FP_IOCTL_GET_EVENT failed (%m)");
- else if (val & FP_EVENT_VCR_SB_CHANGED)
- /* emit */ vcr_sb_notifier(getVCRSlowBlanking());
+ FILE *f = fopen("/proc/stb/fp/events", "r");
+ if (f)
+ {
+ int events;
+ if (fscanf(f, "%d", &events) != 1)
+ eDebug("read /proc/stb/fp/events failed!! (%m)");
+ else if (events & FP_EVENT_VCR_SB_CHANGED)
+ /* emit */ vcr_sb_notifier(getVCRSlowBlanking());
+ fclose(f);
+ }
+ else
+ {
+ int val = FP_EVENT_VCR_SB_CHANGED; // ask only for this event
+ if (ioctl(m_fp_fd, FP_IOCTL_GET_EVENT, &val) < 0)
+ eDebug("FP_IOCTL_GET_EVENT failed (%m)");
+ else if (val & FP_EVENT_VCR_SB_CHANGED)
+ /* emit */ vcr_sb_notifier(getVCRSlowBlanking());
+ }
}
}