Loading drivers/misc/si5338.c +250 −136 Original line number Diff line number Diff line Loading @@ -417,6 +417,7 @@ static const struct si5338_drv_t drv_configs []={ static const char *out_dis_states[]= {"dis_hi-z","dis_low","dis_high","dis_always_on", NULL}; static const char *out_en_states[]= {"output_en","output_dis", NULL}; static const char *out_pwr_states[]= {"output_power_up","output_power_down", NULL}; static const char *ms_pwr_states[]= {"ms_power_up","ms_power_down", NULL}; Loading Loading @@ -530,8 +531,10 @@ static ssize_t ms_p123_store(struct device *dev, struct device_attribute *attr, static ssize_t ms_abc_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static ssize_t ms_powerdown_show (struct device *dev, struct device_attribute *attr, char *buf); static ssize_t ms_powerdown_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static ssize_t ms_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t ms_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_ms_pwr_states(struct device *dev, const char * name, int chn); static int get_ms_powerup_state(struct device *dev, char * buf, int chn); static ssize_t ms_reset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); Loading Loading @@ -559,12 +562,15 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute static ssize_t out_freq_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_freq_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static ssize_t out_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_out_pwr_states(struct device *dev, const char * name, int chn); static int get_powerup_state(struct device *dev, char * buf, int chn); static ssize_t out_en_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_en_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_out_en_states(struct device *dev, const char * name, int chn); static int get_enabled_state(struct device *dev, char * buf, int chn); static ssize_t out_dis_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_dis_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_out_dis_states(struct device *dev, const char * name, int chn); static int get_disabled_state(struct device *dev, char * buf, int chn); Loading Loading @@ -594,6 +600,7 @@ static char * get_drv_txt(struct i2c_client *client, int chn); #endif static int make_config_out (struct device *dev); static ssize_t status_show (struct device *dev, struct device_attribute *attr, char *buf); static ssize_t output_description_show (struct device *dev, struct device_attribute *attr, char *buf); static ssize_t output_route_show(struct device *dev, struct device_attribute *attr, char *buf); Loading Loading @@ -642,6 +649,7 @@ static int get_out_frequency(struct i2c_client *client, u64* out_freq, int chn); static int get_out_source(struct i2c_client *client, int chn); static int set_out_source(struct i2c_client *client, int chn, int src); static int get_out_ms(struct i2c_client *client, int chn); static int get_out_route(struct i2c_client *client, char* buf, int chn); static int set_out_route(struct i2c_client *client, const char* route, int chn); static int set_out_frequency_and_route (struct i2c_client *client, u64 *out_freq, int chn, int int_div); Loading Loading @@ -789,10 +797,9 @@ static DEVICE_ATTR(ms3_p123, SYSFS_PERMISSIONS, ms_p123_show, ms_p123_store); static DEVICE_ATTR(ms3_abc, SYSFS_PERMISSIONS, ms_abc_show, ms_abc_store); static DEVICE_ATTR(msn_p123, SYSFS_PERMISSIONS, ms_p123_show, ms_p123_store); static DEVICE_ATTR(msn_abc, SYSFS_PERMISSIONS, ms_abc_show, ms_abc_store); static DEVICE_ATTR(ms0_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms1_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms2_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms3_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms_power_down, SYSFS_PERMISSIONS, ms_pwr_states_show, ms_pwr_states_store); static DEVICE_ATTR(ms_power_up, SYSFS_PERMISSIONS, ms_pwr_states_show, ms_pwr_states_store); static DEVICE_ATTR(ms_reset, SYSFS_PERMISSIONS & SYSFS_WRITEONLY, NULL, ms_reset_store); static struct attribute *multisynth_attrs[] = { Loading @@ -806,10 +813,8 @@ static struct attribute *multisynth_attrs[] = { &dev_attr_ms3_abc.attr, &dev_attr_msn_p123.attr, &dev_attr_msn_abc.attr, &dev_attr_ms0_powerdown.attr, &dev_attr_ms1_powerdown.attr, &dev_attr_ms2_powerdown.attr, &dev_attr_ms3_powerdown.attr, &dev_attr_ms_power_down.attr, &dev_attr_ms_power_up.attr, &dev_attr_ms_reset.attr, NULL }; Loading Loading @@ -971,6 +976,9 @@ static const struct attribute_group dev_attr_output_group = { .name = "output_clocks", }; /* output drivers */ /* NOTE: state of the outputs changes with clock only, changing "dis_low" to "dis_high" does not work when disabled. * Going through "dis_always_on" works */ #ifdef GENERATE_EXTRA static DEVICE_ATTR(drv0_powerdown, SYSFS_PERMISSIONS, drv_powerdown_show, drv_powerdown_store); static DEVICE_ATTR(drv1_powerdown, SYSFS_PERMISSIONS, drv_powerdown_show, drv_powerdown_store); Loading Loading @@ -1105,11 +1113,14 @@ static const struct attribute_group dev_attr_output_extra_group = { /* root directory */ static DEVICE_ATTR(outputs, SYSFS_PERMISSIONS & SYSFS_READONLY, output_description_show, NULL); static DEVICE_ATTR(status, SYSFS_PERMISSIONS & SYSFS_READONLY, status_show, NULL); static struct attribute *root_dev_attrs[] = { &dev_attr_pre_init.attr, &dev_attr_pre_init_clear.attr, &dev_attr_post_init.attr, &dev_attr_outputs.attr, &dev_attr_status.attr, NULL }; static const struct attribute_group dev_attr_root_group = { Loading Loading @@ -1162,8 +1173,8 @@ static int make_config_out(struct device *dev) /* add outputs disabled states (write only) */ for (iout=0;out_dis_states[iout];iout++) { dev_attrs[index].attr.name=out_dis_states[iout]; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS & SYSFS_WRITEONLY; dev_attrs[index].show=NULL; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS; dev_attrs[index].show=out_dis_states_show; dev_attrs[index].store=out_dis_states_store; pattrs[index]=&(dev_attrs[index].attr); index++; Loading @@ -1171,8 +1182,8 @@ static int make_config_out(struct device *dev) /* add outputs enable (write only) */ for (iout=0;out_en_states[iout];iout++) { dev_attrs[index].attr.name=out_en_states[iout]; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS & SYSFS_WRITEONLY; dev_attrs[index].show=NULL; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS; dev_attrs[index].show=out_en_states_show; dev_attrs[index].store=out_en_states_store; pattrs[index]=&(dev_attrs[index].attr); index++; Loading @@ -1180,14 +1191,13 @@ static int make_config_out(struct device *dev) /* add outputs enable (write only) */ for (iout=0;out_pwr_states[iout];iout++) { dev_attrs[index].attr.name=out_pwr_states[iout]; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS & SYSFS_WRITEONLY; dev_attrs[index].show=NULL; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS; dev_attrs[index].show=out_pwr_states_show; dev_attrs[index].store=out_pwr_states_store; pattrs[index]=&(dev_attrs[index].attr); index++; } /* add outputs (readonly) */ for (iout=0;out_names[iout];iout++) { dev_attrs[index].attr.name=out_names[iout]; Loading @@ -1212,9 +1222,18 @@ static int make_config_out(struct device *dev) return retval; } static ssize_t status_show (struct device *dev, struct device_attribute *attr, char *buf) { int status; struct i2c_client *client = to_i2c_client(dev); if (((status=get_status(client)))<0) return status; return sprintf(buf,"%d input clock: %s, feedback clock: %s, PLL lock: %s, calibration: %s\n", status,(status & 0x4)?"LOST":"OK",(status & 0x8)?"LOST":"OK",(status & 0x10)?"LOST":"OK",(status & 0x10)?"IN PROGRESS":"DONE"); } static ssize_t output_description_show (struct device *dev, struct device_attribute *attr, char *buf) { int i,i1,rc,len=0,show_number; int i,i1,rc,len=0,show_number,ms; struct i2c_client *client = to_i2c_client(dev); for (i=0; out_names[i]; i++) if (strcmp(attr->attr.name,out_names[i]) == 0) break; if (!out_names[i]) return -EINVAL; Loading Loading @@ -1249,6 +1268,15 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib if (((rc=get_out_route(client, buf,i)))<0) return rc; buf+=rc; len+=rc; /* Show MSx power state only if it is used fro the output */ if (((ms=get_out_ms(client,i))) >= 0){ rc=sprintf(buf,", "); buf+=rc; len+=rc; if (((rc=get_ms_powerup_state(dev, buf,i)))<0) return rc; buf+=rc; len+=rc; } rc=sprintf(buf,", disabled state: "); buf+=rc; Loading @@ -1270,8 +1298,7 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib if (((rc=get_enabled_state(dev, buf,i)))<0) return rc; buf+=rc; len+=rc; //show spread spectum settings /* show spread spectum settings */ rc=sprintf(buf,", "); buf+=rc; len+=rc; Loading Loading @@ -1813,24 +1840,55 @@ static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, c return count; } static ssize_t ms_powerdown_show (struct device *dev, struct device_attribute *attr, char *buf) static ssize_t ms_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int data,chn; int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); chn=get_chn_from_name(attr->attr.name); /* uses first digit in the name */ if (((data=get_ms_powerdown(client,chn)))<0) return data; return sprintf(buf, "%d\n",data); for (chn=0;chn<4;chn++){ for (i=0; ms_pwr_states[i]; i++) if (strcmp(attr->attr.name,ms_pwr_states[i]) == 0) { if (i== get_ms_powerdown(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } static ssize_t ms_powerdown_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t ms_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int data,rc,chn; struct i2c_client *client = to_i2c_client(dev); chn=get_chn_from_name(attr->attr.name); /* uses first digit in the name */ sscanf(buf, "%d", &data); if (((rc=set_ms_powerdown(client, data, chn)))<0) return rc; int chn, num_bytes,rc; while ((rc=sscanf(buf, "%d%n", &chn,&num_bytes))){ dev_dbg(dev,"buf=%s rc==%d chn=%d num_bytes=%d", buf, rc,chn,num_bytes); buf+=num_bytes; if (((rc=set_ms_pwr_states(dev, attr->attr.name, chn)))<0) return rc; } return count; } static int set_ms_pwr_states(struct device *dev, const char * name, int chn) { int i,rc; struct i2c_client *client = to_i2c_client(dev); dev_dbg(dev,"name=%s chn=%d", name,chn); if (((rc=_verify_output_channel(client,chn)))<0) return rc; for (i=0; ms_pwr_states[i]; i++) if (strcmp(name,ms_pwr_states[i]) == 0) { if (((rc=set_ms_powerdown(client, i, chn)))<0) return rc; return 0; } return -EINVAL; } static int get_ms_powerup_state(struct device *dev, char * buf, int chn) { int index; struct i2c_client *client = to_i2c_client(dev); if (((index=get_ms_powerdown(client,chn)))<0) return index; return sprintf (buf,ms_pwr_states[index]); } static ssize_t ms_reset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct i2c_client *client = to_i2c_client(dev); Loading Loading @@ -1885,7 +1943,7 @@ static ssize_t ss_vals_store(struct device *dev, struct device_attribute *attr, if (((state= get_ss_state(client, chn)))<0) return state; if (((rate= get_ss_down_rate(client, chn)))<0) return rate; if (((amp= get_ss_down_amplitude(client, chn)))<0) return amp; num_items=sscanf(buf, "%d %d %d", &state, &rate, &); num_items=sscanf(buf, "%d %d %d", &state, &, &rate); if (num_items>1){ if (((rc= store_ss_down_parameters(client, rate, amp, chn)))<0) return rc; } Loading Loading @@ -1943,12 +2001,6 @@ static ssize_t ss_regs_hex_store(struct device *dev, struct device_attribute *at return count; } static ssize_t pre_init_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int rc,clear_all; Loading Loading @@ -2139,7 +2191,22 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute return count; } static ssize_t out_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); for (chn=0;chn<4;chn++){ for (i=0; out_pwr_states[i]; i++) if (strcmp(attr->attr.name,out_pwr_states[i]) == 0) { if (i== get_drv_powerdown(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t out_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { Loading Loading @@ -2173,6 +2240,23 @@ static int get_powerup_state(struct device *dev, char * buf, int chn) return sprintf (buf,out_pwr_states[index]); } static ssize_t out_en_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); for (chn=0;chn<4;chn++){ for (i=0; out_en_states[i]; i++) if (strcmp(attr->attr.name,out_en_states[i]) == 0) { if (i== get_drv_disable(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t out_en_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int chn, num_bytes,rc; Loading Loading @@ -2205,6 +2289,22 @@ static int get_enabled_state(struct device *dev, char * buf, int chn) return sprintf (buf,out_en_states[index]); } static ssize_t out_dis_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); for (chn=0;chn<4;chn++){ for (i=0; out_dis_states[i]; i++) if (strcmp(attr->attr.name,out_dis_states[i]) == 0) { if (i== get_drv_disabled_state(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t out_dis_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int chn, num_bytes,rc; Loading Loading @@ -2235,6 +2335,7 @@ static int get_disabled_state(struct device *dev, char * buf, int chn) if (((index=get_drv_disabled_state(client,chn)))<0) return index; return sprintf (buf,out_dis_states[index]); } #ifdef GENERATE_EXTRA static ssize_t drv_powerdown_show (struct device *dev, struct device_attribute *attr, char *buf) { Loading Loading @@ -3013,6 +3114,19 @@ static int set_out_source(struct i2c_client *client, int chn, int src) } return write_field (client, (u8) src, awe_rdiv_in[chn]); } static int get_out_ms(struct i2c_client *client, int chn) { int rc,out_src; if (((rc=_verify_output_channel(client,chn)))<0) return rc; if (((out_src=get_out_source(client, chn)))<0) return out_src; switch (out_src){ case 5: return 0; case 6: return chn; } return -1; } /* Examples: * "IN12:2:4" * "XO:1:1" Loading Loading @@ -3489,7 +3603,7 @@ static int get_ms_powerdown(struct i2c_client *client, int chn) { int rc; if (((rc=_verify_output_channel(client,chn)))<0) return rc; return read_field (client, awe_drv_powerdown[chn]); return read_field (client, awe_ms_powerdown[chn]); } static int set_ms_powerdown(struct i2c_client *client, int typ, int chn) Loading @@ -3497,7 +3611,7 @@ static int set_ms_powerdown(struct i2c_client *client, int typ, int chn) int rc; if (((rc=_verify_output_channel(client,chn)))<0) return rc; if (typ) typ=1; return write_field (client, (u8) typ, awe_drv_powerdown[chn]); return write_field (client, (u8) typ, awe_ms_powerdown[chn]); } static int ms_to_p123(u64* ms,u32 * p123) Loading Loading
drivers/misc/si5338.c +250 −136 Original line number Diff line number Diff line Loading @@ -417,6 +417,7 @@ static const struct si5338_drv_t drv_configs []={ static const char *out_dis_states[]= {"dis_hi-z","dis_low","dis_high","dis_always_on", NULL}; static const char *out_en_states[]= {"output_en","output_dis", NULL}; static const char *out_pwr_states[]= {"output_power_up","output_power_down", NULL}; static const char *ms_pwr_states[]= {"ms_power_up","ms_power_down", NULL}; Loading Loading @@ -530,8 +531,10 @@ static ssize_t ms_p123_store(struct device *dev, struct device_attribute *attr, static ssize_t ms_abc_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static ssize_t ms_powerdown_show (struct device *dev, struct device_attribute *attr, char *buf); static ssize_t ms_powerdown_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static ssize_t ms_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t ms_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_ms_pwr_states(struct device *dev, const char * name, int chn); static int get_ms_powerup_state(struct device *dev, char * buf, int chn); static ssize_t ms_reset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); Loading Loading @@ -559,12 +562,15 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute static ssize_t out_freq_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_freq_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static ssize_t out_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_out_pwr_states(struct device *dev, const char * name, int chn); static int get_powerup_state(struct device *dev, char * buf, int chn); static ssize_t out_en_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_en_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_out_en_states(struct device *dev, const char * name, int chn); static int get_enabled_state(struct device *dev, char * buf, int chn); static ssize_t out_dis_states_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t out_dis_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); static int set_out_dis_states(struct device *dev, const char * name, int chn); static int get_disabled_state(struct device *dev, char * buf, int chn); Loading Loading @@ -594,6 +600,7 @@ static char * get_drv_txt(struct i2c_client *client, int chn); #endif static int make_config_out (struct device *dev); static ssize_t status_show (struct device *dev, struct device_attribute *attr, char *buf); static ssize_t output_description_show (struct device *dev, struct device_attribute *attr, char *buf); static ssize_t output_route_show(struct device *dev, struct device_attribute *attr, char *buf); Loading Loading @@ -642,6 +649,7 @@ static int get_out_frequency(struct i2c_client *client, u64* out_freq, int chn); static int get_out_source(struct i2c_client *client, int chn); static int set_out_source(struct i2c_client *client, int chn, int src); static int get_out_ms(struct i2c_client *client, int chn); static int get_out_route(struct i2c_client *client, char* buf, int chn); static int set_out_route(struct i2c_client *client, const char* route, int chn); static int set_out_frequency_and_route (struct i2c_client *client, u64 *out_freq, int chn, int int_div); Loading Loading @@ -789,10 +797,9 @@ static DEVICE_ATTR(ms3_p123, SYSFS_PERMISSIONS, ms_p123_show, ms_p123_store); static DEVICE_ATTR(ms3_abc, SYSFS_PERMISSIONS, ms_abc_show, ms_abc_store); static DEVICE_ATTR(msn_p123, SYSFS_PERMISSIONS, ms_p123_show, ms_p123_store); static DEVICE_ATTR(msn_abc, SYSFS_PERMISSIONS, ms_abc_show, ms_abc_store); static DEVICE_ATTR(ms0_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms1_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms2_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms3_powerdown, SYSFS_PERMISSIONS, ms_powerdown_show, ms_powerdown_store); static DEVICE_ATTR(ms_power_down, SYSFS_PERMISSIONS, ms_pwr_states_show, ms_pwr_states_store); static DEVICE_ATTR(ms_power_up, SYSFS_PERMISSIONS, ms_pwr_states_show, ms_pwr_states_store); static DEVICE_ATTR(ms_reset, SYSFS_PERMISSIONS & SYSFS_WRITEONLY, NULL, ms_reset_store); static struct attribute *multisynth_attrs[] = { Loading @@ -806,10 +813,8 @@ static struct attribute *multisynth_attrs[] = { &dev_attr_ms3_abc.attr, &dev_attr_msn_p123.attr, &dev_attr_msn_abc.attr, &dev_attr_ms0_powerdown.attr, &dev_attr_ms1_powerdown.attr, &dev_attr_ms2_powerdown.attr, &dev_attr_ms3_powerdown.attr, &dev_attr_ms_power_down.attr, &dev_attr_ms_power_up.attr, &dev_attr_ms_reset.attr, NULL }; Loading Loading @@ -971,6 +976,9 @@ static const struct attribute_group dev_attr_output_group = { .name = "output_clocks", }; /* output drivers */ /* NOTE: state of the outputs changes with clock only, changing "dis_low" to "dis_high" does not work when disabled. * Going through "dis_always_on" works */ #ifdef GENERATE_EXTRA static DEVICE_ATTR(drv0_powerdown, SYSFS_PERMISSIONS, drv_powerdown_show, drv_powerdown_store); static DEVICE_ATTR(drv1_powerdown, SYSFS_PERMISSIONS, drv_powerdown_show, drv_powerdown_store); Loading Loading @@ -1105,11 +1113,14 @@ static const struct attribute_group dev_attr_output_extra_group = { /* root directory */ static DEVICE_ATTR(outputs, SYSFS_PERMISSIONS & SYSFS_READONLY, output_description_show, NULL); static DEVICE_ATTR(status, SYSFS_PERMISSIONS & SYSFS_READONLY, status_show, NULL); static struct attribute *root_dev_attrs[] = { &dev_attr_pre_init.attr, &dev_attr_pre_init_clear.attr, &dev_attr_post_init.attr, &dev_attr_outputs.attr, &dev_attr_status.attr, NULL }; static const struct attribute_group dev_attr_root_group = { Loading Loading @@ -1162,8 +1173,8 @@ static int make_config_out(struct device *dev) /* add outputs disabled states (write only) */ for (iout=0;out_dis_states[iout];iout++) { dev_attrs[index].attr.name=out_dis_states[iout]; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS & SYSFS_WRITEONLY; dev_attrs[index].show=NULL; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS; dev_attrs[index].show=out_dis_states_show; dev_attrs[index].store=out_dis_states_store; pattrs[index]=&(dev_attrs[index].attr); index++; Loading @@ -1171,8 +1182,8 @@ static int make_config_out(struct device *dev) /* add outputs enable (write only) */ for (iout=0;out_en_states[iout];iout++) { dev_attrs[index].attr.name=out_en_states[iout]; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS & SYSFS_WRITEONLY; dev_attrs[index].show=NULL; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS; dev_attrs[index].show=out_en_states_show; dev_attrs[index].store=out_en_states_store; pattrs[index]=&(dev_attrs[index].attr); index++; Loading @@ -1180,14 +1191,13 @@ static int make_config_out(struct device *dev) /* add outputs enable (write only) */ for (iout=0;out_pwr_states[iout];iout++) { dev_attrs[index].attr.name=out_pwr_states[iout]; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS & SYSFS_WRITEONLY; dev_attrs[index].show=NULL; dev_attrs[index].attr.mode=SYSFS_PERMISSIONS; dev_attrs[index].show=out_pwr_states_show; dev_attrs[index].store=out_pwr_states_store; pattrs[index]=&(dev_attrs[index].attr); index++; } /* add outputs (readonly) */ for (iout=0;out_names[iout];iout++) { dev_attrs[index].attr.name=out_names[iout]; Loading @@ -1212,9 +1222,18 @@ static int make_config_out(struct device *dev) return retval; } static ssize_t status_show (struct device *dev, struct device_attribute *attr, char *buf) { int status; struct i2c_client *client = to_i2c_client(dev); if (((status=get_status(client)))<0) return status; return sprintf(buf,"%d input clock: %s, feedback clock: %s, PLL lock: %s, calibration: %s\n", status,(status & 0x4)?"LOST":"OK",(status & 0x8)?"LOST":"OK",(status & 0x10)?"LOST":"OK",(status & 0x10)?"IN PROGRESS":"DONE"); } static ssize_t output_description_show (struct device *dev, struct device_attribute *attr, char *buf) { int i,i1,rc,len=0,show_number; int i,i1,rc,len=0,show_number,ms; struct i2c_client *client = to_i2c_client(dev); for (i=0; out_names[i]; i++) if (strcmp(attr->attr.name,out_names[i]) == 0) break; if (!out_names[i]) return -EINVAL; Loading Loading @@ -1249,6 +1268,15 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib if (((rc=get_out_route(client, buf,i)))<0) return rc; buf+=rc; len+=rc; /* Show MSx power state only if it is used fro the output */ if (((ms=get_out_ms(client,i))) >= 0){ rc=sprintf(buf,", "); buf+=rc; len+=rc; if (((rc=get_ms_powerup_state(dev, buf,i)))<0) return rc; buf+=rc; len+=rc; } rc=sprintf(buf,", disabled state: "); buf+=rc; Loading @@ -1270,8 +1298,7 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib if (((rc=get_enabled_state(dev, buf,i)))<0) return rc; buf+=rc; len+=rc; //show spread spectum settings /* show spread spectum settings */ rc=sprintf(buf,", "); buf+=rc; len+=rc; Loading Loading @@ -1813,24 +1840,55 @@ static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, c return count; } static ssize_t ms_powerdown_show (struct device *dev, struct device_attribute *attr, char *buf) static ssize_t ms_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int data,chn; int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); chn=get_chn_from_name(attr->attr.name); /* uses first digit in the name */ if (((data=get_ms_powerdown(client,chn)))<0) return data; return sprintf(buf, "%d\n",data); for (chn=0;chn<4;chn++){ for (i=0; ms_pwr_states[i]; i++) if (strcmp(attr->attr.name,ms_pwr_states[i]) == 0) { if (i== get_ms_powerdown(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } static ssize_t ms_powerdown_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t ms_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int data,rc,chn; struct i2c_client *client = to_i2c_client(dev); chn=get_chn_from_name(attr->attr.name); /* uses first digit in the name */ sscanf(buf, "%d", &data); if (((rc=set_ms_powerdown(client, data, chn)))<0) return rc; int chn, num_bytes,rc; while ((rc=sscanf(buf, "%d%n", &chn,&num_bytes))){ dev_dbg(dev,"buf=%s rc==%d chn=%d num_bytes=%d", buf, rc,chn,num_bytes); buf+=num_bytes; if (((rc=set_ms_pwr_states(dev, attr->attr.name, chn)))<0) return rc; } return count; } static int set_ms_pwr_states(struct device *dev, const char * name, int chn) { int i,rc; struct i2c_client *client = to_i2c_client(dev); dev_dbg(dev,"name=%s chn=%d", name,chn); if (((rc=_verify_output_channel(client,chn)))<0) return rc; for (i=0; ms_pwr_states[i]; i++) if (strcmp(name,ms_pwr_states[i]) == 0) { if (((rc=set_ms_powerdown(client, i, chn)))<0) return rc; return 0; } return -EINVAL; } static int get_ms_powerup_state(struct device *dev, char * buf, int chn) { int index; struct i2c_client *client = to_i2c_client(dev); if (((index=get_ms_powerdown(client,chn)))<0) return index; return sprintf (buf,ms_pwr_states[index]); } static ssize_t ms_reset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct i2c_client *client = to_i2c_client(dev); Loading Loading @@ -1885,7 +1943,7 @@ static ssize_t ss_vals_store(struct device *dev, struct device_attribute *attr, if (((state= get_ss_state(client, chn)))<0) return state; if (((rate= get_ss_down_rate(client, chn)))<0) return rate; if (((amp= get_ss_down_amplitude(client, chn)))<0) return amp; num_items=sscanf(buf, "%d %d %d", &state, &rate, &); num_items=sscanf(buf, "%d %d %d", &state, &, &rate); if (num_items>1){ if (((rc= store_ss_down_parameters(client, rate, amp, chn)))<0) return rc; } Loading Loading @@ -1943,12 +2001,6 @@ static ssize_t ss_regs_hex_store(struct device *dev, struct device_attribute *at return count; } static ssize_t pre_init_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int rc,clear_all; Loading Loading @@ -2139,7 +2191,22 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute return count; } static ssize_t out_pwr_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); for (chn=0;chn<4;chn++){ for (i=0; out_pwr_states[i]; i++) if (strcmp(attr->attr.name,out_pwr_states[i]) == 0) { if (i== get_drv_powerdown(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t out_pwr_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { Loading Loading @@ -2173,6 +2240,23 @@ static int get_powerup_state(struct device *dev, char * buf, int chn) return sprintf (buf,out_pwr_states[index]); } static ssize_t out_en_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); for (chn=0;chn<4;chn++){ for (i=0; out_en_states[i]; i++) if (strcmp(attr->attr.name,out_en_states[i]) == 0) { if (i== get_drv_disable(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t out_en_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int chn, num_bytes,rc; Loading Loading @@ -2205,6 +2289,22 @@ static int get_enabled_state(struct device *dev, char * buf, int chn) return sprintf (buf,out_en_states[index]); } static ssize_t out_dis_states_show(struct device *dev, struct device_attribute *attr, char *buf) { int chn, i; char * cp=buf; struct i2c_client *client = to_i2c_client(dev); for (chn=0;chn<4;chn++){ for (i=0; out_dis_states[i]; i++) if (strcmp(attr->attr.name,out_dis_states[i]) == 0) { if (i== get_drv_disabled_state(client, chn)){ buf+=sprintf(buf," %d",chn); break; } } } buf+=sprintf(buf,"\n"); return buf-cp; } static ssize_t out_dis_states_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int chn, num_bytes,rc; Loading Loading @@ -2235,6 +2335,7 @@ static int get_disabled_state(struct device *dev, char * buf, int chn) if (((index=get_drv_disabled_state(client,chn)))<0) return index; return sprintf (buf,out_dis_states[index]); } #ifdef GENERATE_EXTRA static ssize_t drv_powerdown_show (struct device *dev, struct device_attribute *attr, char *buf) { Loading Loading @@ -3013,6 +3114,19 @@ static int set_out_source(struct i2c_client *client, int chn, int src) } return write_field (client, (u8) src, awe_rdiv_in[chn]); } static int get_out_ms(struct i2c_client *client, int chn) { int rc,out_src; if (((rc=_verify_output_channel(client,chn)))<0) return rc; if (((out_src=get_out_source(client, chn)))<0) return out_src; switch (out_src){ case 5: return 0; case 6: return chn; } return -1; } /* Examples: * "IN12:2:4" * "XO:1:1" Loading Loading @@ -3489,7 +3603,7 @@ static int get_ms_powerdown(struct i2c_client *client, int chn) { int rc; if (((rc=_verify_output_channel(client,chn)))<0) return rc; return read_field (client, awe_drv_powerdown[chn]); return read_field (client, awe_ms_powerdown[chn]); } static int set_ms_powerdown(struct i2c_client *client, int typ, int chn) Loading @@ -3497,7 +3611,7 @@ static int set_ms_powerdown(struct i2c_client *client, int typ, int chn) int rc; if (((rc=_verify_output_channel(client,chn)))<0) return rc; if (typ) typ=1; return write_field (client, (u8) typ, awe_drv_powerdown[chn]); return write_field (client, (u8) typ, awe_ms_powerdown[chn]); } static int ms_to_p123(u64* ms,u32 * p123) Loading