@@ -14,13 +14,37 @@
#include <linux/platform_device.h>
#include <mach/omap-pm.h>
+#include <mach/resource.h>
#include <dspbridge/host_os.h>
+#include "smartreflex.h"
+
static struct platform_device *dspbridge_pdev;
+
+/* workaround for SR with unapropriate OPP */
+static void __omap_pm_dsp_set_min_opp(u8 opp_id)
+{
+ u32 current_vdd1opp_no;
+
+ switch (opp_id) {
+ case 2:
+ sr_stop_vddautocomap(SR1);
+ break;
+ default:
+ current_vdd1opp_no = resource_get_level("vdd1_opp");
+ if (IS_ERR_VALUE(current_vdd1opp_no))
+ return;
+ sr_start_vddautocomap(SR1, current_vdd1opp_no);
+ break;
+ }
+
+ omap_pm_dsp_set_min_opp(opp_id);
+}
+
static struct dspbridge_platform_data dspbridge_pdata __initdata = {
- .dsp_set_min_opp = omap_pm_dsp_set_min_opp,
+ .dsp_set_min_opp = __omap_pm_dsp_set_min_opp,
.dsp_get_opp = omap_pm_dsp_get_opp,
.cpu_set_freq = omap_pm_cpu_set_freq,
.cpu_get_freq = omap_pm_cpu_get_freq,